cara memuat ulang nginx - systemctl atau nginx -s?

24

Apakah ada perbedaan antara menelepon

systemctl reload nginx

dan menelepon

nginx -s reload

?

Saya tahu bahwa, selain systemd, ada sistem init lainnya seperti SysV dan Upstart. Jadi mungkin pertanyaan ini juga berlaku untuk mereka.

Apakah lebih baik mengeluarkan perintah ini melalui sistem init atau bisakah saya memanggil nginx sendiri?

Terima kasih sebelumnya

moonring
sumber
1
Sebenarnya jika sistem Anda mendukungnya, saya lebih suka menggunakan serviceatau init.d, sepertisudo service nginx reload
Mohammad AbuShady

Jawaban:

23

Anda dapat mengetahui apa yang systemd reload nginxakan dilakukan dengan melihat ExecReload=opsi di [Service]bagian dalam nginx.servicefile unit (terletak di /usr/lib/systemd/system/nginx.servicesistem saya):

$ systemctl cat nginx | grep ExecReload=

Atau dengan menjalankan:

$ systemctl show nginx.service --property=ExecReload

Di sistem saya, saya mendapatkan:

ExecReload=/usr/bin/kill -HUP $MAINPID

Dari nginx(8):

-s signal      Send a signal to the master process. The argument signal
               can be one of: stop, quit, reopen, reload. The following
               table shows the corresponding system signals:

               stop    SIGTERM
               quit    SIGQUIT
               reopen  SIGUSR1
               reload  SIGHUP

Dengan demikian systemctl reload nginxdan nginx -s reloadakan, hampir , melakukan hal yang sama.

Perbedaannya adalah:

  • systemctl reload nginx akan menjalankan perintah di lingkungan yang bersih (dan bukan lingkungan pengguna saat ini);
  • systemctl reloadberfungsi untuk layanan apa pun yang memungkinkannya (yang telah dikonfigurasi dalam file unit). Tidak perlu mengingat perintah khusus layanan. Ini bahkan lebih menarik jika Anda memiliki beberapa contoh layanan.

Menggunakan serviceatau init.dskrip adalah cara lama / usang dalam melakukan hal yang sama. Meskipun mereka mungkin bekerja, mereka tidak didukung atau direkomendasikan lagi pada sistem berbasis sistem.

Siosm
sumber
5

Saat ini ada perbedaan pada Centos 7 dan RHEL 7. Menggunakan systemctl reload nginx TIDAK akan memvalidasi konfigurasi Anda.

Lihat bug berikut: https://bugzilla.redhat.com/show_bug.cgi?id=1565377

Jadi saya akan menyarankan menggunakan nginx -s reload atau memperbarui file unit nginx Anda untuk menggunakan perintah reload berikut:

ExecReload=/usr/sbin/nginx -s reload

https://bugzilla.redhat.com/attachment.cgi?id=1419614&action=diff

Stijn Diependaele
sumber