47 votes

Nginx ne parvient pas à s'arrêter et nginx.pid est manquant

Je veux arrêter Nginx mais il échoue comme ceci.

$ sudo service nginx stop
Stopping nginx:                                            [FAILED]

Et nginx.conf qui définit la place de nginx.pid ont une ligne.

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

Mais il n'y a pas de nginx.pid dans le répertoire /var/run/ .

locate nginx.pid affiche cette sortie.

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

Mais après updatedb il n'y a pas de correspondance pour la recherche. J'utilise nginx/1.4.4 en CentOS release 6.5 (Final) .

Que dois-je faire pour arrêter le démon nginx ?

Editer 2014/01/07

Il s'agit de la sortie de ps -ef | grep nginx Il semble que le démon nginx soit toujours en cours d'exécution.

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  

Et sudo service nginx restart donne cette erreur. Je pense que nginx ne démarre pas parce que l'ancien est encore en vie. Et /var/log/nginx/error.log-2014017 contient également cette erreur.

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]

0voto

Journeyman Geek Points 6949

J'aurais besoin de plus d'informations pour en être sûr, mais je suppose que vous l'avez déjà fait. autre serveur web en cours d'exécution plutôt que l'instance de ngnix que vous voulez elle-même, vous devez donc la trouver - l'erreur indique que le port 80 est en cours d'utilisation, mais pas par quel port.

Pruebe netstat -tulpn - Vous recherchez une entrée sous l'adresse locale qui se termine par :80 - cela vous donnera également le nom du programme et le PID afin que vous puissiez l'identifier. Voici le mien - je lance lighttpd et il apparaît sur la troisième ligne.

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

Arrêter l'autre serveur web correctement (car s'il se produit au démarrage, un 'kill' normal peut ne pas fonctionner) et essayez de démarrer ngnix. Si c'est le cas, vous pouvez/devez alors éditer votre init scripts pour empêcher l'autre serveur web de démarrer, ou ajuster sa configuration sur une autre puissance.

0voto

Pete Williams Points 1

J'ai eu un problème similaire avec Ubuntu 10.10 et une version compilée de nginx tournant dans /opt/nginx/sbin.

vérifiez les fichiers /opt/nginx/conf/nginx.conf et /etc/nginx/nginx.conf et assurez-vous qu'ils correspondent.

Ajuster le fichier de démarrage /etc/init.d/nginx pour qu'il corresponde à l'emplacement de nginx.pid tester en utilisant :

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

0voto

prosti Points 318

Pour arrêter nginx, consultez le manuel pour savoir comment faire man nginx .

Par défaut, il convient d'utiliser le signal d'arrêt avec nginx -s stop .

Cela devrait être aussi simple que cela. Vos options sont les suivantes :

stop, quit, reopen, reload.

0voto

Komal Points 1

Essayez ceci :

sudo fuser -k 443/tcp
sudo fuser -k 80/tcp

Trouvé ici : https://www.digitalocean.com/community/questions/nginx-is-unable-to-bind-to-443

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X