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.
sumber
Jawaban:
Apa yang Anda katakan benar,
reload
memberi 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 amanrestart
. Saya pribadi tidak menggunakanpostgresql
, jadi saya tidak tahu.sumber
reload-or-restart
sumber
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 mendukungforce-reload
tindakan, yang berartireload
jika layanan mendukungnya, danrestart
jika layanan tidak mendukung pemuatan ulang.Saya tidak yakin bagaimana itu diterjemahkan ke dalam dunia pemula modern Ubuntu.
sumber
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.
sumber
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).
sumber
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. "
sumber