Wie lade ich nginx - systemctl oder nginx -s neu?

24

Gibt es einen Unterschied zwischen Anrufen

systemctl reload nginx

und anrufen

nginx -s reload

?

Ich weiß, dass es neben systemd noch andere Init-Systeme wie SysV und Upstart gibt. Vielleicht trifft diese Frage auch auf sie zu.

Ist es vorzuziehen, diesen Befehl über das Init-System abzusetzen, oder kann ich einfach nginx selbst aufrufen?

Danke im Voraus

Mondring
quelle
1
Eigentlich, wenn Ihr System es unterstützt, würde ich es vorziehen, serviceoder init.d, wiesudo service nginx reload
Mohammad AbuShady

Antworten:

23

Sie können herausfinden, was getan systemd reload nginxwird, indem Sie die ExecReload=Option im [Service]Abschnitt in der nginx.serviceUnit-Datei ( /usr/lib/systemd/system/nginx.serviceauf meinem System) überprüfen:

$ systemctl cat nginx | grep ExecReload=

Oder durch Laufen:

$ systemctl show nginx.service --property=ExecReload

Auf meinem System bekomme ich:

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

Von 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

So systemctl reload nginxund nginx -s reloadwird fast dasselbe tun.

Die Unterschiede sind:

  • systemctl reload nginx führt den Befehl in einer sauberen Umgebung aus (und nicht in der aktuellen Benutzerumgebung);
  • systemctl reloadfunktioniert für jeden Dienst, der dies zulässt (der in der Gerätedatei konfiguriert ist). Keine Notwendigkeit, sich an dienstspezifische Befehle zu erinnern. Dies ist umso interessanter, wenn Sie mehrere Instanzen eines Dienstes haben.

Die Verwendung von serviceoder init.dSkripten ist eine alte oder veraltete Methode, um dasselbe zu tun. Obwohl sie möglicherweise funktionieren, werden sie auf einem systembasierten System nicht mehr unterstützt oder empfohlen.

Siosm
quelle
5

Derzeit gibt es einen Unterschied zwischen Centos 7 und RHEL 7. Wenn Sie systemctl reload nginx verwenden, wird Ihre Konfiguration NICHT validiert.

Lesen Sie den folgenden Fehler: https://bugzilla.redhat.com/show_bug.cgi?id=1565377

Daher würde ich empfehlen, nginx -s reload zu verwenden oder Ihre nginx-Unit-Datei zu aktualisieren, um den folgenden reload-Befehl zu verwenden:

ExecReload=/usr/sbin/nginx -s reload

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

Stijn Diependaele
quelle