Apa perbedaan antara "service restart" dan "service reload"


74

Saya mencoba memahami perbedaan antara service restart [someservice]dan service reload [someservice]. Saya mengerti bahwa "restart" akan me-restart layanan sedangkan "reload" memuat ulang konfigurasi, tetapi saya tidak mengerti implikasi praktis dari ini dengan cukup baik untuk menentukan mana yang harus saya gunakan dalam konteks yang diberikan.

Contoh: kebanyakan panduan yang saya baca untuk mengatur PostgreSQL mengatakan bahwa, setelah saya mengedit postgresql.conf dan pg_hba.conf untuk memungkinkan koneksi jarak jauh, saya harus mengeluarkan sudo service postgresql restart. Namun, jika saya menebak mana yang akan digunakan berdasarkan uraian di atas saya akan memilih "memuat ulang".

Dalam hal ini penting, saya di Ubuntu 11,10 - meskipun saya berharap untuk penjelasan yang berlaku secara umum mungkin.


2
Beberapa tahun yang lalu, saya menjalankan server dengan beberapa ribu pengguna. memulai ulang Apache tidak cepat karena alasan apa pun, butuh sekitar 3 menit untuk memulai kembali apache (alasan). Bagaimanapun, jika server turun selama 3 menit bos saya akan mendapatkan sekitar 800 panggilan telepon. Dengan layanan reload, 0 panggilan telepon. Itulah perbedaannya.
j0h

Jawaban:


41

Apa yang Anda katakan benar, reloadmemberi tahu layanan untuk memuat ulang file konfigurasinya. Itu berarti harus cukup untuk memuat ulang konfigurasi; namun mungkin ada layanan tertentu yang "tidak mengikuti aturan" atau yang tidak akan memuat ulang file konfigurasi. Karena ini, Anda mungkin lebih aman restart. Saya pribadi tidak menggunakan postgresql, jadi saya tidak tahu.


1
Sementara itu, adareload-or-restart
Suuuehgi

Untuk PostgreSQL, Anda dapat menerapkan perubahan pada /etc/postgresql/version/main/postgresql.conf dengan memuat ulang. Menerapkan perubahan pada pg_hba.conf membutuhkan restart.
Aidan Melen


8

Tidak semua layanan mendukung reload. Bagi yang melakukannya, biasanya lebih baik memulai ulang (mis. Memuat ulang menyebabkan lebih sedikit atau tidak ada downtime).

Manual Kebijakan Debian menentukan bahwa setiap /etc/init.d/skrip harus mendukung force-reloadtindakan, yang berarti reloadjika layanan mendukungnya, dan restartjika layanan tidak mendukung pemuatan ulang.

Saya tidak yakin bagaimana itu diterjemahkan ke dalam dunia pemula modern Ubuntu.


1
Manual Kebijakan Debian adalah tautan yang sangat berguna, terima kasih.
bukan tambalan

1
kebanyakan dukungan memuat ulang, jika tidak melalui layanan sistem, pikir /etc/init.d/SomeProgram memuat ulang
j0h

4

Untuk memperluas عبد النور التومي jawaban dengan pengalaman saya dengan systemd.

Dalam systemd setiap kali sebuah proses dimulai dijalankan dalam konteks systemd, contoh yang paling jelas adalah dengan variabel lingkungan yang didefinisikan dalam file unitnya.

Jadi ketika Anda mengirim systemctl reload [someservice]sinyal, ia mengirim sinyal ke layanan untuk memuat ulang dirinya dengan anggun jika didukung. Jika tidak, proses akan mengabaikan sinyal. Ini bisa dikonfigurasi.

Apa yang saya maksud dengan anggun? untuk memulai pekerja baru dengan konfigurasi atau kode baru dan menghentikan pekerja lama saat mereka selesai melayani permintaan saat ini jika ada.

Dan jika Anda membuatnya systemctl restart [someservice]akan memberitahu systemctl untuk memberitahu layanan untuk berhenti, hancurkan konteks systemd saat ini, buat yang baru dan jalankan layanan lagi. Ini masuk akal misalnya untuk memuat ulang variabel lingkungan dalam konteks systemd atau jika memuat ulang tidak didukung.

Semoga ini sedikit menjelaskan dan jika saya salah dalam sesuatu tolong beri tahu saya.


0

saat ini jika suatu layanan perlu ditendang (mis. file konfigurasi diubah) Anda dapat memberi tahu layanan tersebut, tetapi ini mengarah ke restart. Akan lebih baik jika memuat ulang dilakukan jika layanan sudah berjalan (meskipun saya kira pasti ada beberapa layanan yang memerlukan restart untuk beberapa file, ulang untuk yang lain).

Contoh paling kompleks yang bisa saya pikirkan adalah sesuatu seperti Apache. Biasanya Anda hanya dapat meminta untuk memuat ulang, namun terkadang Anda perlu meminta restart sebagai gantinya (jika Anda menambah / menghapus modul misalnya).


0

postgres adalah contoh yang baik untuk perbedaan besar antara memuat ulang dan memulai ulang, karena nanti harus memutus semua basis data klien.

ketika koneksi tidak boleh rollback, Anda dapat menghentikan layanan tanpa "--force" pada awalnya dengan menggunakan pg_ctlcluster .

di /etc/postgres/{version}/{dbname}/postgresql.conf dan di http://www.postgresql.org/docs/manuals/ setiap parameter memiliki komentar seperti "Parameter ini hanya dapat diatur saat server mulai. "

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.