Frage Nginx stoppt nicht und nginx.pid fehlt


Ich möchte Nginx stoppen, aber es scheitert so.

$ sudo service nginx stop
Stopping nginx:                                            [FAILED]

Und nginx.conf Das definiert den Ort von nginx.pid mit einer Linie.

# /etc/nginx/nginx.conf
pid        /var/run/nginx.pid;

Aber es gibt keinen nginx.pid im Verzeichnis /var/run/.

locate nginx.pid zeigt diese Ausgabe an.

/var/run/nginx.pid 
/var/run/nginx.pid.oldbin

Aber danach updatedb Es gibt keine Übereinstimmung für die Suche. Ich benutze nginx / 1.4.4 in CentOS release 6.5 (Final).

Was soll ich tun, um den Nginx-Daemon zu stoppen?

Bearbeite 2014/01/07

Dies wird ausgegeben von ps -ef | grep nginxEs scheint, dass nginx-Daemon noch läuft.

ironsand 17065 16933  0 15:55 pts/0    00:00:00 grep --color nginx
root     19506     1  0  2013 ?        00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
ironsand 19507 19506  0  2013 ?        00:00:25 nginx: worker process  

Und sudo service nginx restart gibt diesen Fehler. Meiner Ansicht nach nginx startet nicht, weil der alte noch lebt. Und /var/log/nginx/error.log-2014017 enthält auch diesen Fehler.

Stopping nginx:                                            [FAILED]
Starting nginx: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
                                                           [FAILED]

31
2018-01-06 14:13


Ursprung


Das System kann nginx nicht stoppen, wenn es nicht läuft und da es keine PID-Datei gibt, vermute ich, dass es bereits gestoppt ist. Sie können mit überprüfen ps -ef | grep nginx oder sudo netstat -tlnp | grep nginx. - Ladadadada
Danke für deinen Rat. Ich fügte Ergebnis von hinzu ps Befehl. - ironsand


Antworten:


Ich werde empfehlen, nginx zu stoppen, indem Sie zuerst den Master-Prozess beenden. Der Nginx wird nicht ordnungsgemäß heruntergefahren, deshalb kann er nicht mit dem Init-Skript gestoppt werden.

ps -ef | grep nginx

Dies zeigt Ihnen die PID des Nginx-Master-Prozesses. Wie du oben erwähnt hast:

Wurzel 19506 1 0 2013? 00:00:00 nginx: Hauptprozess   / usr / sbin / nginx -c /etc/nginx/nginx.conf

Töte es mit

töten -9 19506

Überprüfen Sie erneut, ob ein Nginx-Prozess ausgeführt wird oder Port 80 belegt ist. Wenn Sie sehen, dass ein Prozess an Port 80 gebunden ist, identifizieren Sie die PID und prüfen Sie, ob sie beendet werden kann.

ps -ef | grep nginx

netstat -tulpn | grep 80

Stellen Sie sicher, dass das Dateisystem in Ordnung ist und dass Sie das / var-Dateisystem lesen / schreiben können. Dann starte nginx

Dienst nginx Start


30
2018-01-07 07:46



Vielen Dank! Nachdem ich den Master-Prozess beendet hatte, musste ich auch den Nginx-Worker-Prozess beenden. Dann kann ich endlich den nginx-Daemon starten. - ironsand
Du hast gerade eine Seele gerettet Sandeep! Vielen Dank für die Dokumentation .. - Thale
Danke @sandeep.s85. Nützlich für mich auch. Interessant, was dazu führen würde, dass die Datei nginx.pid fehlt, während nginx läuft? - Codemonkey
Das ist mir gerade wieder passiert, ich wünschte, ich wüsste, was es verursacht. - Codemonkey
Mein Nginx-Master-Prozess kommt wieder zum Leben, nachdem ich ihn getötet habe. - WTIFS


Problem

Für mich war der Name der PID-Datei in diesen beiden Dateien unterschiedlich:

  • /usr/lib/systemd/system/nginx.service
    • pid /var/run/nginx.pid;
  • /etc/nginx/nginx.conf
    • PIDFile=/run/nginx.pid

Diese beiden müssen übereinstimmen.

Fix:

Also habe ich es in /usr/lib/systemd/system/nginx.service angepasst und dann:

systemctl daemon-reload
systemctl start nginx

Dann kam es richtig auf.


8
2017-07-15 08:57



Woher? In Ubuntu /var/run/ ist ein Symlink von /run/ - Zlatev
Ja, das ist überhaupt keine Lösung. Aber in meinem Fall ist alles /run/nginx.pid. - danger89
Meine nginx.conf hatte pid logs / nginx.pid drin - geändert in /run/nginx.pid und es wurde behoben, danke Patrick! - phpguru


Ich hatte dieses Problem und rannte ps -ef | grep nginx würde mir Arbeiter zeigen, die sich weiterdrehen würden, obwohl sie den Meisterprozess, wie von der angenommenen Antwort vorgeschlagen, töteten:

[~]# ps -ef | grep nginx
nginx    10730     1  0 Sep14 ?        00:00:16 nginx: cache manager process            
nginx    18469     1  0 Oct09 ?        00:11:02 nginx: worker process                   
nginx    25779     1  0 Oct13 ?        00:01:31 nginx: worker process                   
nginx    26458     1  0 15:45 ?        00:00:00 nginx: worker process    

So meine Lösung es zu reparieren war einfach das: pkill nginx && service nginx restart


7
2017-10-14 19:58



Diese Lösung hat für mich funktioniert, danke! - Himmel


Mein Problem war, dass ich es getan hatte pid in zwei verschiedenen conf-Dateien angegeben. Nachdem ich eine Referenz entfernt habe, lösche ich die .pid Datei und startete nginx wieder es begann normal zu verhalten.


1
2018-04-17 22:51



Yep this one, die PID ist in /usr/lib/systemd/system/nginx-debug.service und /etc/nginx/nginx.conf definiert - edmondscommerce


Dies scheint darauf hinzuweisen, dass nginx sofort abstürzt, wenn es früher gestartet wurde. Haben Sie den Inhalt von überprüft? /var/log/nginx* um zu sehen, was der Prozess macht?

EDIT: Auch wenn Sie uns Ihr Betriebssystem und die Version von Nginx sagen, können wir detailliertere Antworten geben.


0
2018-01-06 16:21





Ich würde mehr Informationen brauchen, um sicher zu sein, aber ich vermute, du hast es schon getan Ein weiterer Web-Server läuft eher als die Instanz von ngnix, die Sie selbst wollen, also müssen Sie sie finden - der Fehler sagt Port 80 wird verwendet, aber nicht von was

Versuchen netstat -tulpn - Sie suchen nach einem Eintrag unter lokaler Adresse, der endet mit: 80 - dies gibt Ihnen auch den Programmnamen und die PID, damit Sie sie identifizieren können. Hier ist meins - Ich laufe lighttpd und es ist in der 3. Zeile angezeigt.

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:5000          0.0.0.0:*               LISTEN      4684/rtorrent
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      923/php-fpm.conf)
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      972/lighttpd
tcp        0      0 0.0.0.0:6901            0.0.0.0:*               LISTEN      4684/rtorrent
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      720/sshd
tcp6       0      0 :::22                   :::*                    LISTEN      720/sshd
udp        0      0 0.0.0.0:6881            0.0.0.0:*                           4684/rtorrent

Fahren Sie den anderen Webserver herunter richtig (Da es, wenn es einen Emporkömmling hervorbringt, ein normales 'Töten' nicht funktionieren kann) und versuchen Sie, ngnix zu starten. Wenn dies der Fall ist, können / sollten Sie dann Ihre Init-Skripte bearbeiten, um den Start des anderen Web-Servers zu stoppen, oder seine Konfiguration auf andere Weise anpassen.


0
2018-01-07 07:45



Danke für Ihre Hilfe. netstat -tulpn zeigt an tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 19507/nginx. Irgendwie hat nginx diesen Port besetzt. Aber wie Sandeep sagte, habe ich Nginx Prozess getötet, dann funktioniert es. Ich schätze Ihre Hilfe! - ironsand


Ich hatte ein ähnliches Problem mit Ubuntu 10.10 und einer kompilierten Version von nginx, die in / opt / nginx / sbin läuft.

Überprüfen Sie beide Dateien /opt/nginx/conf/nginx.conf und /etc/nginx/nginx.conf und vergewissern Sie sich, dass sie übereinstimmen.

Passen Sie die /etc/init.d/nginx-Startup-Datei an die Position von nginx.pid an testen mit:

sudo /etc/init.d/nginx configtest # should show no failures
sudo /etc/init.d/nginx start      # should show starting
sudo /etc/init.d/nginx status     # should show running
sudo /etc/init.d/nginx stop       # should show stopping -- (wait for a few)
sudo /etc/init.d/nginx status     # should show can not access PID file for nginx
sudo netstat -tap  # should not show nginx program running with open local address

0
2018-04-26 15:22





Um zu stoppen nginx überprüfen Sie die Anleitung, wie es geht man nginx.

Der Standardweg sollte sein, das Stoppsignal mit zu verwenden nginx -s stop.

Sollte wirklich so einfach sein. Ihre Optionen sind:

stop, quit, reopen, reload.

0
2017-08-14 16:25