jak przeładować nginx - systemctl lub nginx -s?

24

Czy istnieje różnica między telefonowaniem?

systemctl reload nginx

i dzwonienie

nginx -s reload

?

Wiem, że oprócz systemd istnieją inne systemy inicjujące, takie jak SysV i Upstart. Więc może to pytanie dotyczy również ich.

Czy lepiej wydać to polecenie za pośrednictwem systemu init, czy mogę po prostu wywołać sam nginx?

Z góry dziękuję

księżyca
źródło
1
Właściwie, jeśli twój system to obsługuje, wolałbym używać servicelub init.d, jaksudo service nginx reload
Mohammad AbuShady,

Odpowiedzi:

23

Możesz dowiedzieć się, co systemd reload nginxzrobisz, patrząc na ExecReload=opcję w [Service]sekcji nginx.servicepliku jednostkowego (znajdującą się w /usr/lib/systemd/system/nginx.servicemoim systemie):

$ systemctl cat nginx | grep ExecReload=

Lub uruchamiając:

$ systemctl show nginx.service --property=ExecReload

W moim systemie otrzymuję:

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

Od 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

W ten sposób systemctl reload nginxi nginx -s reloadbędzie prawie , zrobić to samo.

Różnice są następujące:

  • systemctl reload nginx wykona polecenie w czystym środowisku (a nie w bieżącym środowisku użytkownika);
  • systemctl reloaddziała dla każdej usługi, która na to pozwala (która została skonfigurowana w pliku jednostkowym). Nie trzeba pamiętać poleceń specyficznych dla usługi. Jest to jeszcze bardziej interesujące, jeśli masz kilka wystąpień usługi.

Korzystanie servicelub init.dskrypty są starsze / przestarzałe sposoby robienia tego samego. Chociaż mogą działać, nie są już obsługiwane ani zalecane w systemie opartym na systemie.

Siosm
źródło
5

Obecnie istnieją różnice w Centos 7 i RHEL 7. Użycie systemctl reload nginx NIE sprawdzi twojej konfiguracji.

Zobacz następujący błąd: https://bugzilla.redhat.com/show_bug.cgi?id=1565377

Radziłbym więc użyć przeładowania nginx-s lub zaktualizować plik jednostki nginx, aby używał następującego polecenia przeładowania:

ExecReload=/usr/sbin/nginx -s reload

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

Stijn Diependaele
źródło