it-swarm.com.de

Nginx kann nicht gestoppt werden und nginx.pid fehlt

Ich möchte Nginx stoppen, aber es schlägt so fehl.

$ Sudo service nginx stop
Stopping nginx:                                            [FAILED]

Und nginx.conf, Der die Stelle von nginx.pid definiert, hat eine Zeile.

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

Es gibt jedoch kein nginx.pid Im Verzeichnis /var/run/.

locate nginx.pid Zeigt diese Ausgabe.

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

Aber nach updatedb gibt es keine Übereinstimmung für die Suche. Ich verwende nginx/1.4.4 in CentOS release 6.5 (Final).

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

Bearbeiten 2014/01/07

Dies ist die Ausgabe von ps -ef | grep nginx, Es scheint, dass der 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 aus. Ich denke, 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]
34
ironsand

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

ps -ef | grep nginx

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

root 19506 1 0 2013? 00:00:00 nginx: Master-Prozess/usr/sbin/nginx -c /etc/nginx/nginx.conf

Töte es mit

töte -9 19506

Überprüfen Sie erneut, ob ein Nginx-Prozess ausgeführt wird oder Port 80 belegt ist. Wenn Sie feststellen, 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 Sie in das Dateisystem/var lesen/schreiben können. Dann starten Sie nginx

service Nginx Start

37
sandeep.s85

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 hoch.

11
Patrick Boos

Ich hatte dieses Problem und lief ps -ef | grep nginx würde mir Arbeiter zeigen, die sich weiter drehen würden, obwohl sie den Master-Prozess beendet haben, wie in der akzeptierten Antwort vorgeschlagen:

[~]# 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    

Also meine Lösung um es zu beheben war einfach das: pkill nginx && service nginx restart

9
amurrell

Mein Problem war, dass ich pid in zwei verschiedenen conf-Dateien angegeben hatte. Nachdem ich eine Referenz entfernt hatte, löschte ich das .pid Datei und startete nginx erneut, es begann sich normal zu verhalten.

1
matthewdaniel

Ich hatte ein ähnliches Problem mit Ubuntu 10.10 und einer kompilierten Version von nginx, die in/opt/nginx/sbin ausgeführt wird.

überprüfen Sie die Dateien /opt/nginx/conf/nginx.conf und /etc/nginx/nginx.conf und stellen Sie sicher, dass sie übereinstimmen.

Passen Sie die Startdatei /etc/init.d/nginx an den Standorttest nginx.pid an, indem Sie Folgendes verwenden:

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
Pete Williams

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

BEARBEITEN: Wenn Sie uns Ihr Betriebssystem und Ihre Version von nginx mitteilen, können wir Ihnen detailliertere Antworten geben.

0
zymhan

Um nginx zu stoppen, lesen Sie das Handbuch man nginx.

Standardmäßig sollte das Stoppsignal mit nginx -s stop Verwendet werden.

Sollte wirklich so einfach sein. Ihre Optionen sind:

stop, quit, reopen, reload.
0
prosti

Versuche dies:

Sudo fuser -k 443/tcp
Sudo fuser -k 80/tcp

Fand es hier: https://www.digitalocean.com/community/questions/nginx-is-unable-to-bind-to-44

0
Komal

Ich würde mehr Informationen benötigen, um sicher zu sein, aber ich vermute, Sie haben bereits einen anderen Webserver ausgeführt, anstatt die Instanz von ngnix, die Sie selbst möchten, also müssen Sie sie finden - der Fehler besagt Port 80 wird verwendet, aber nicht von was

Versuchen netstat -tulpn - Sie suchen nach einem Eintrag unter der lokalen Adresse, der mit: 80 endet. Dadurch erhalten Sie auch den Programmnamen und die PID, damit Sie ihn identifizieren können. Hier ist meins - ich verwende lighttpd und es wird 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 ordnungsgemäß (da ein normaler 'Kill' möglicherweise nicht funktioniert, wenn der Startvorgang ausgelöst wird) und versuchen Sie, ngnix zu starten. In diesem Fall können/sollten Sie Ihre Init-Skripte bearbeiten, um den Start des anderen Webservers zu stoppen, oder seine Konfiguration an einem anderen Netz anpassen.

0
Journeyman Geek