Nginx non si arresta e manca nginx.pid


33

Voglio fermare Nginx ma fallisce così.

$ sudo service nginx stop
Stopping nginx:                                            [FAILED]

E nginx.confquesto definisce il posto di nginx.pid con una linea.

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

Ma non c'è nginx.pidnella directory /var/run/.

locate nginx.pid mostra questo output.

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

Ma dopo updatedbnon c'è più corrispondenza per la ricerca. Sto usando nginx / 1.4.4 in CentOS release 6.5 (Final).

Cosa devo fare per fermare il demone nginx?

Modifica 2014/01/07

Questo è l'output di ps -ef | grep nginx, sembra che il demone nginx sia ancora in esecuzione.

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  

E sudo service nginx restartdà questo errore. Penso che nginxnon riesca a iniziare perché il vecchio è ancora vivo. E /var/log/nginx/error.log-2014017contiene anche questo errore.

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]

3
Il sistema non può arrestare nginx se non è in esecuzione e poiché non esiste un file PID, sospetto che sia già stato arrestato. Puoi verificare con ps -ef | grep nginxo sudo netstat -tlnp | grep nginx.
Ladadadada,

1
Grazie per il tuo consiglio. Ho aggiunto il risultato del pscomando.
Iron and

Risposte:


37

Consiglierò di interrompere nginx uccidendo prima il processo principale. Il nginx non è spento correttamente potrebbe essere a causa di ciò non può essere fermato usando lo script init.

ps -ef | grep nginx

Questo ti mostrerà il PID del processo master di nginx. Come hai menzionato sopra:

radice 19506 1 0 2013? 00:00:00 nginx: processo principale / usr / sbin / nginx -c /etc/nginx/nginx.conf

Uccidilo usando

uccidere -9 19506

Verificare ancora una volta se è in esecuzione un processo nginx o se la porta 80 è occupata. Se vedi che qualsiasi processo è associato alla porta 80, Identifica il PID e controlla se può essere ucciso.

ps -ef | grep nginx

netstat -tulpn | grep 80

assicurati che il filesystem vada bene e che tu possa leggere / scrivere nel file system / var. Quindi avvia nginx

servizio nginx start


Grazie! Dopo aver ucciso il processo principale, ho dovuto uccidere anche il processo di lavoro nginx. Quindi posso finalmente avviare il demone nginx.
Feronsand

Hai salvato un'anima proprio ora Sandeep! Grazie mille per la documentazione ..
Thale

Grazie @ sandeep.s85. Utile anche a me Per interesse, cosa potrebbe causare la mancanza del file nginx.pid mentre nginx è in esecuzione?
Codemonkey

Questo è successo di nuovo per me, vorrei sapere cosa lo causa.
Codemonkey,

Il mio processo master nginx torna a vivere dopo che l'ho ucciso.
WTIFS,

11

Problema

Per me il nome del file pid era diverso in quei due file:

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

Quei due devono abbinare.

fix:

Quindi l'ho modificato in /usr/lib/systemd/system/nginx.service e poi ho fatto:

systemctl daemon-reload
systemctl start nginx

Poi è arrivato correttamente.


3
Come mai? In Ubuntu /var/run/è un link simbolico di/run/
Z. Zlatev,

Sì, quindi questa non è affatto una soluzione. Ma nel mio caso tutto è /run/nginx.pid.
danger89,

Il mio nginx.conf conteneva log pid / nginx.pid - cambiato in /run/nginx.pid ed è stato corretto, grazie Patrick!
phpguru,

9

Ho avuto questo problema e correre ps -ef | grep nginxmi ha mostrato dei lavoratori che continuavano a girare, nonostante uccidessero il processo principale come suggerito dalla risposta accettata:

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

Quindi la mia soluzione per risolverlo era semplicemente questa:pkill nginx && service nginx restart


1

Il mio problema era che avevo pidspecificato in due diversi file conf. Dopo aver rimosso un riferimento, quindi eliminato il .pidfile e avviato nuovamente nginx, ha iniziato a comportarsi normalmente.


Sì, il PID è definito in /usr/lib/systemd/system/nginx-debug.service e /etc/nginx/nginx.conf
edmondscommerce

0

Questo sembra indicare che nginx si sta bloccando immediatamente, se fosse stato avviato in precedenza. Hai controllato il contenuto di /var/log/nginx*per vedere cosa sta facendo il processo?

EDIT: Inoltre, se ci dici il tuo sistema operativo e la versione di nginx, possiamo fornire risposte più dettagliate.


0

Avrei bisogno di maggiori informazioni per essere sicuro ma, suppongo che tu abbia già un altro server web in esecuzione piuttosto che l'istanza di ngnix che vuoi tu stessa, quindi devi trovarla - l'errore dice che la porta 80 è in uso, ma non da che cosa

Prova netstat -tulpn- Stai cercando una voce sotto l'indirizzo locale che termina con: 80 - questo ti darà anche il nome del programma e il PID in modo da poterlo identificare. Ecco il mio: sto eseguendo lighttpd ed è mostrato sulla terza riga.

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

Spegni correttamente l'altro server web (poiché se si avvia in modo anomalo, un normale "kill" potrebbe non funzionare) e prova ad avviare ngnix. In tal caso, è possibile / modificare i propri script di init per interrompere l'avvio dell'altro server Web o modificarne la configurazione con un'altra potenza.


Grazie per l'aiuto. netstat -tulpnspettacoli tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 19507/nginx. Quindi in qualche modo nginx occupava quella porta. Ma come diceva sandeep, ho interrotto il processo di nginx, quindi funziona. Apprezzo il vostro aiuto!
Feronsand

0

Ho avuto un problema simile con Ubuntu 10.10 e una versione compilata di nginx in esecuzione in / opt / nginx / sbin.

controlla entrambi i file /opt/nginx/conf/nginx.conf e /etc/nginx/nginx.conf e verifica che corrispondano.

Regola il file di avvio /etc/init.d/nginx in modo che corrisponda al test della posizione nginx.pid usando:

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

Per interrompere nginx, consultare il manuale su come farlo man nginx.

Il modo predefinito dovrebbe essere di usare il segnale di stop con nginx -s stop.

Dovrebbe essere così semplice davvero. Le tue opzioni sono:

stop, quit, reopen, reload.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.