Mir ist aufgefallen, dass viele der Befehle nginx -s reload
und nginx -s stop
(fast?) identisch zu service nginx reload
und zu sein scheinen service nginx stop
.
Sind diese „Präfixe“ tatsächlich austauschbar? Ruft eines von ihnen irgendwie das andere hervor?
Antwort1
Da Sie Ubuntu 18.04 (also eine aktuelle Linux-Distribution) verwenden, würde ich eine dritte vorschlagen"alias"Befehl: systemctl reload nginx
und /etc/init.d/nginx reload
.
Der springende Punkt ist folgender: Jeder Server/jede Anwendung hat seine eigene Art zu starten, zu stoppen, neu zu laden usw. Dies kann so einfach sein wie ein Aufruf nginx
oder so kompliziert wie das Setzen mehrerer Umgebungsvariablen und der Aufruf java <a_lot_of_options> org.apache.catalina.startup.Bootstrap start
von Tomcat.
Um eine einheitliche und automatische Möglichkeit zum Starten von Anwendungen bereitzustellen, stellen Distributionen Init-Skripte (oder ähnliches) bereit, die auf einem neuen Ubuntu in drei Varianten verfügbar sind:
- Das modernesystemd:
systemctl <verb> nginx
, - Das Erbe (für Ubuntu)Emporkömmling:
service nginx <verb>
, - Der ältesteSysV-Initialisierung:
/etc/init.d/nginx <verb>
.
Unter Ubuntusystemdist der aktuelle, während die anderen anrufensystemdDie Konfigurationsdatei /lib/systemd/system/nginx.service
für nginx enthält:
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
Also:
systemctl reload nginx
callsnginx -s reload
, jedoch mit der zusätzlichen Option-g 'daemon on; master_process on;'
, die diese beiden Konfigurationsoptionen außer Kraft setzt,systemctl stop nginx
verwendet ein Hilfsprogrammstart-stop-daemon
zur ÜberwachungnginxHerunterfahren. Dieses Programm sendet einSIGQUIT
Signal an nginx, das dasselbe ist wienginx -s quit
: 5 Sekunden warten und, wenn nginx noch läuft, Fehler melden.
Im Allgemeinen ist es besser, die systemctl <verb> <service>
Befehle zu verwenden, anstatt Anwendungen selbst zu starten.
Bearbeiten: Eigentlichsystemdtut viel mehr als nur den Befehl auszuführen: es verbindet seinen Eingang/Ausgang mitsystemd-journaldbegrenzt es die ihm zur Verfügung stehenden Mittel (Kontrollgruppen) und die Sichtbarkeit anderer Teile des Systems (Namensräume), konfiguriert es den ProzessFähigkeitenund wahrscheinlich noch etwas mehr.