Wie kann ich nginx neu starten, nur nach der Konfiguration test war erfolgreich auf Ubuntu?
Wenn ich starten Sie den nginx-Dienst auf einer Kommandozeile auf einem Ubuntu-server, der Dienst stürzt ab, wenn eine nginx-Konfiguration-Datei hat Fehler. Auf einem multi-site-server-dieser stellt alle Seiten, auch diejenigen, die ohne Konfigurationsfehler.
Um dies zu verhindern, führe ich die nginx-Konfiguration, test-first:
nginx -t
Nachdem der test lief erfolgreich, ich konnte den Dienst neu starten:
/etc/init.d/nginx restart
Oder nur ein reload der nignx Website-Konfigurationen ohne Neustart:
nginx -s reload
Gibt es eine Möglichkeit, kombinieren diese beiden Befehle, wo der restart-Befehl ist abhängig von der Konfiguration Testergebnis?
Konnte ich nicht finden diese online und die offizielle Dokumentation auf dieser ist eher basic. Ich weiß nicht, meinen Weg um Linux, naja, also ich weiß nicht, ob das, was ich Suche, ist direkt vor mir oder überhaupt nicht möglich.
Ich bin mit nginx v1.1.19.
- Was ist mit einem kleinen shell-Skript, das überprüft, der status des nginx -t (mit $?) und dann funktioniert der Neustart abhängig vom Zustand zurück?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eigentlich, soweit ich weiß, nginx, zeigt sich eine leere Nachricht und wäre es nicht eigentlich neu starten, wenn die Konfiguration schlecht.
Der einzige Weg, um die Schraube es ist auf diese Weise ein nginx stoppen und dann erneut starten. Würde es gelingen, Sie zu beenden, aber nicht starten.
service nginx reload
zeigt nichts an, ob die config geladen wurde, korrekt oder nicht, so ist es nutzlos, wenn Sie vermuten, dass die config ist möglicherweise falsch.service nginx restart
wird aufhören, wenn der server mit der config ist ein Fehler!Als der nginx 1.8.0, die richtige Lösung ist
Beachten Sie, dass aufgrund eines Fehlers,
configtest
gibt immer einen exit-code null auch, wenn die config-Datei hat einen Fehler.Ich benutze den folgenden Befehl, um neu zu laden Nginx (version 1.5.9) nur, wenn eine Konfiguration, test war erfolgreich:
Wenn Sie müssen, tun Sie dies oft, können Sie ein alias verwenden möchten. Ich verwende die folgenden:
Der trick hier ist getan durch "&&", was nur führt den zweiten Befehl, wenn der erste erfolgreich war. Sie können sehen, hier eine ausführlichere Erläuterung der Verwendung von "&&" - operator.
Können Sie "neu starten" anstatt auf "neu laden", wenn Sie wirklich wollen, starten Sie den server neu.
pkill -1 nginx
(effektiv, was meine init.d/nginx reload tut) NICHT laden, wenn die config schlägt fehl und irreführend zurück erfolgreich. Überprüfen Sie Ihre eigenen Versionen.nginx -t
statt.und verwenden Sie dann die Befehle "nginx.neu laden" etc..
Können Sie Signale zur Ansteuerung von nginx.
Gemäß der Dokumentation, die Sie benötigen, um das senden des HUP-Signals nginx master-Prozess.
Überprüfen Sie die Dokumentation hier: http://nginx.org/en/docs/control.html
Können Sie senden das signal HUP nginx master Prozess-PID wie diese:
Den Befehl über nginx liest die PID aus
/var/run/nginx.pid
. Standardmäßig nginx pid geschrieben/usr/local/nginx/logs/nginx.pid
aber überschrieben werden können, in der config. Überprüfen Sie Ihrenginx.config
um zu sehen, wo es speichert die PID.Können Sie reload mit
/etc/init.d/nginx reload
undsudo service nginx reload
Wenn
nginx -t
wirft einige Fehler, dann wird es nicht neu ladenso verwenden && laufen beide gleichzeitig
wie
run both at a same time
Es führt den Befehl auf der rechten Seite, WENN Sie den Befehl auf der linken Seite gibt einen exit-code von 0. Wenn Ihrnginx -t
wirft einen Fehler, es ist der exit-code nicht 0, so wird der zweite Befehl wird nicht ausgeführt. Seinenginx -s reload
sowiesoIf nginx -t throws some error then it won't reload
. Die Aussagerun both at a same time
könnte auch interpretiert werden als ein einzelner Befehl oder eine Zeile. Ich glaube nicht, interpretieren ihn unbedingt sagen, in diesem Fallin parallel
.Zumindest unter Debian der Apache-Startskript hat eine reload-Funktion, die bedeutet:
Scheint, wie alles, was Sie würde tun müssen ist, rufen Sie
service nginx reload
stattrestart
da ruft estest_nginx_config
.service nginx reload
wird nicht geben, jede Art von Hinweis, ob die Konfiguration getestet OK oder nicht, oder ob es erneut geladen wurde oder nicht.test_nginx_config
tun, dann in diesem Fall?service nginx reload
ausreichend ist, auf der Kommandozeile, aber manchmal möchten Sie vielleicht eine capture stderr output-und return, die an ein Skript für die Problembehandlung.nginx -t
würde Ihnen sagen, welche Datei hatte, die ungültige parameter und auf die Linie.