Ist „nginx -s“ dasselbe wie „service nginx“?

Ist „nginx -s“ dasselbe wie „service nginx“?

Mir ist aufgefallen, dass viele der Befehle nginx -s reloadund nginx -s stop(fast?) identisch zu service nginx reloadund 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 nginxund /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 nginxoder so kompliziert wie das Setzen mehrerer Umgebungsvariablen und der Aufruf java <a_lot_of_options> org.apache.catalina.startup.Bootstrap startvon 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:

  1. Das modernesystemd: systemctl <verb> nginx,
  2. Das Erbe (für Ubuntu)Emporkömmling: service nginx <verb>,
  3. Der ältesteSysV-Initialisierung: /etc/init.d/nginx <verb>.

Unter Ubuntusystemdist der aktuelle, während die anderen anrufensystemdDie Konfigurationsdatei /lib/systemd/system/nginx.servicefü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 nginxcalls nginx -s reload, jedoch mit der zusätzlichen Option -g 'daemon on; master_process on;', die diese beiden Konfigurationsoptionen außer Kraft setzt,
  • systemctl stop nginxverwendet ein Hilfsprogramm start-stop-daemonzur ÜberwachungnginxHerunterfahren. Dieses Programm sendet ein SIGQUITSignal an nginx, das dasselbe ist wie nginx -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.

verwandte Informationen