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

Gibt es einen Unterschied zwischen dem Aufruf von

systemctl reload nginx

Und Aufruf von

nginx -s reload

?

Ich weiß, dass es neben systemd noch andere Init-Systeme wie SysV und Upstart gibt. Vielleicht gilt diese Frage auch für sie.

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

Danke im Voraus

Author: moonring, 2014-02-03

3 answers

Sie können herausfinden, was systemd reload nginx tun wird, indem Sie sich die Option ExecReload= im Abschnitt [Service] in der Unit-Datei nginx.service ansehen (befindet sich unter /usr/lib/systemd/system/nginx.service auf meinem System):

$ systemctl cat nginx | grep ExecReload=

Oder durch Ausführen:

$ 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

Also werden systemctl reload nginx und nginx -s reload, fast, dasselbe tun.

Die Unterschiede sind:

  • systemctl reload nginx führt den Befehl in einer sauberen Umgebung (und nicht dem aktuellen Benutzer) aus environment)
  • systemctl reload funktioniert für jeden Dienst, der es zulässt (der es in der Unit-Datei konfiguriert hat). Sie müssen sich keine dienstspezifischen Befehle merken. Dies ist noch interessanter, wenn Sie mehrere Instanzen eines Dienstes haben.

Die Verwendung von service oder init.d Skripten sind veraltete / veraltete Methoden, um dasselbe zu tun. Obwohl sie möglicherweise funktionieren, werden sie auf einem systemd-basierten System nicht mehr unterstützt oder empfohlen.

 26
Author: Timothée Ravier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-08-10 20:23:09

Derzeit gibt es einen Unterschied zwischen Centos 7 und RHEL 7. Die Verwendung von systemctl reload nginx validiert Ihre Konfiguration NICHT.

Siehe 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

 6
Author: Stijn Diependaele,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-05-18 11:49:06

Wir hatten keinen Erfolg mit systemctl. Um jedoch eine Nginx-Konfiguration neu zu laden, können Sie HUP an den Master-Prozess[1] senden. Wir verwenden nur killall (nein, es tötet nicht, es sendet ein Signal), um HUP an alle Nginx-Prozesse zu senden. Ich nehme an, die Arbeiter ignorieren einfach den HUP:

sudo killall -s HUP nginx

Voila! Die neue Konfiguration wird geladen und angewendet.

[1] http://nginx.org/en/docs/control.html

 0
Author: Marc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-08-05 20:28:28