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]

52voto

cheezsteak Points 113

Je recommande d'arrêter nginx en tuant d'abord son processus principal. Le nginx n'est pas arrêté correctement, c'est peut-être pour cette raison qu'il ne peut pas être arrêté en utilisant init script.

ps -ef |grep nginx

Cela vous montrera le PID du processus maître de nginx. Comme vous l'avez mentionné ci-dessus :

root 19506 1 0 2013 ? 00:00:00 nginx : processus maître /usr/sbin/nginx -c /etc/nginx/nginx.conf

Le tuer en utilisant

tuer -9 19506

Vérifiez à nouveau si un processus nginx est en cours d'exécution ou si le port 80 est occupé. Si vous voyez qu'un processus est lié au port 80, identifiez son PID et vérifiez s'il peut être tué.

ps -ef |grep nginx

netstat -tulpn |grep 80

assurez-vous que le système de fichiers est correct et que vous pouvez lire/écrire dans le système de fichiers /var. Démarrez ensuite nginx

service nginx start

14voto

Patrick Boos Points 249

Problema

Pour moi, le nom du fichier pid était différent dans ces deux fichiers :

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

Ces deux éléments doivent correspondre.

Fixer :

Je l'ai donc ajusté dans /usr/lib/systemd/system/nginx.service et je l'ai fait :

systemctl daemon-reload
systemctl start nginx

Il s'est ensuite affiché correctement.

11voto

amurrell Points 581

J'ai rencontré ce problème et j'ai exécuté ps -ef | grep nginx me montrerait des travailleurs qui continueraient à tourner, malgré l'arrêt du processus principal, comme le suggère la réponse acceptée :

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

Así que ma solution pour y remédier était tout simplement la suivante : pkill nginx && service nginx restart

1voto

matthewdaniel Points 111

Mon problème était que j'avais pid dans deux fichiers conf différents. Après avoir supprimé une référence, j'ai supprimé le fichier .pid et redémarré nginx, il s'est comporté normalement.

0voto

zymhan Points 1332

Cela semble indiquer que nginx se bloque immédiatement, s'il a été démarré plus tôt. Avez-vous vérifié le contenu de /var/log/nginx* pour voir ce que fait le processus ?

EDIT : De plus, si vous nous indiquez votre système d'exploitation et la version de nginx, nous pourrons vous donner des réponses plus détaillées.

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