Nginx no se detiene y falta nginx.pid


33

Quiero detener Nginx pero falla así.

$ sudo service nginx stop
Stopping nginx:                                            [FAILED]

Y nginx.confeso define el lugar de nginx.pid tiene una línea.

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

Pero no hay nginx.piden el directorio /var/run/.

locate nginx.pid muestra esta salida

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

Pero después updatedbno hay coincidencia para la búsqueda. Estoy usando nginx / 1.4.4 in CentOS release 6.5 (Final).

¿Qué debo hacer para detener el demonio nginx?

Editar 2014/01/07

Esta es la salida de ps -ef | grep nginx, parece que nginx daemon todavía se está ejecutando.

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  

Y sudo service nginx restartda este error. Creo que nginxno puede comenzar porque el viejo todavía está vivo. Y /var/log/nginx/error.log-2014017contiene también este error.

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
El sistema no puede detener nginx si no se está ejecutando y, dado que no hay un archivo PID, sospecho que ya está detenido. Puedes consultar con ps -ef | grep nginxo sudo netstat -tlnp | grep nginx.
— Ladadadada

1
Gracias por su consejo. Agregué el resultado del pscomando.
— ironsand

Respuestas:


37

Recomendaré detener nginx matando primero su proceso maestro. El nginx no se apaga correctamente puede deberse a que no se puede detener con el script de inicio.

ps -ef | grep nginx

Esto le mostrará el PID del proceso maestro nginx. Como mencionaste anteriormente:

raíz 19506 1 0 2013? 00:00:00 nginx: proceso maestro / usr / sbin / nginx -c /etc/nginx/nginx.conf

Mátalo usando

matar -9 19506

Verifique una vez más si hay algún proceso nginx ejecutándose o si el puerto 80 está ocupado. Si ve que algún proceso está vinculado al puerto 80, identifique el PID y verifique si se puede eliminar.

ps -ef | grep nginx

netstat -tulpn | grep 80

asegúrese de que el sistema de archivos esté bien y que pueda leer / escribir en el sistema de archivos / var. Entonces comience nginx

servicio nginx start


¡Gracias! Después de matar el proceso maestro, tuve que matar también el proceso de trabajo nginx. Entonces finalmente puedo comenzar nginx daemon.
— ironsand

¡Salvaste un alma ahora mismo Sandeep! Muchas gracias por documentar ..
— Thale

Gracias @ sandeep.s85. Útil para mí también. Por interés, ¿qué causaría que faltara el archivo nginx.pid mientras se ejecuta nginx?
— Codemonkey

Esto acaba de suceder nuevamente para mí, desearía saber qué lo causa.
— Codemonkey

Mi proceso maestro nginx vuelve a la vida después de que lo mato.
— WTIFS

11

Problema

Para mí, el nombre del archivo pid era diferente en esos dos archivos:

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

Esos dos necesitan coincidir.

Fijar:

Así que lo ajusté en /usr/lib/systemd/system/nginx.service y luego lo hice:

systemctl daemon-reload
systemctl start nginx

Entonces surgió correctamente.


3
¿Cómo? En Ubuntu /var/run/hay un enlace simbólico de/run/
— Z. Zlatev

Sí, eso no es una solución en absoluto. Pero en mi caso todo es /run/nginx.pid.
— danger89

Mi nginx.conf tenía registros pid / nginx.pid, cambió a /run/nginx.pid y se solucionó, ¡gracias Patrick!
— phpguru

9

Tuve este problema, y ​​correr ps -ef | grep nginxme mostraría trabajadores que seguirían girando, a pesar de matar el proceso maestro como lo sugiere la respuesta aceptada:

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

Entonces, mi solución para solucionarlo fue simplemente esto:pkill nginx && service nginx restart


1

Mi problema era que había pidespecificado en dos archivos conf diferentes. Después de eliminar una referencia, luego eliminé el .pidarchivo y comencé a nginx nuevamente, comenzó a comportarse normalmente.


Sí, el PID se define en /usr/lib/systemd/system/nginx-debug.service y /etc/nginx/nginx.conf
— edmondscommerce

0

Esto parece indicar que nginx se bloquea de inmediato, si se había iniciado antes. ¿Ha verificado el contenido de /var/log/nginx*para ver qué está haciendo el proceso?

EDITAR: Además, si nos dice su sistema operativo y la versión de nginx, podemos darle respuestas más detalladas.


0

Necesitaría más información para estar seguro, pero supongo que ya tiene otro servidor web ejecutándose en lugar de la instancia de ngnix que desea, por lo que debe encontrarla: el error dice que el puerto 80 está en uso, pero no qué

Intente netstat -tulpn: está buscando una entrada en la dirección local que termine con: 80: esto también le dará el nombre del programa y el PID para que pueda identificarlo. Aquí está el mío: estoy ejecutando lighttpd y se muestra en la tercera línea.

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

Apague el otro servidor web correctamente (ya que si se está originando en el arranque, una 'muerte' normal puede no funcionar) e intente iniciar ngnix. Si ese es el caso, puede / debe editar sus scripts de inicio para detener el inicio del otro servidor web, o ajustar su configuración en otra potencia.


Gracias por tu ayuda. netstat -tulpnmuestra tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 19507/nginx. Entonces de alguna manera nginx ocupó ese puerto. Pero como dijo sandeep, maté el proceso nginx y luego funciona. ¡Aprecio tu ayuda!
— ironsand

0

Tuve un problema similar con Ubuntu 10.10 y una versión compilada de nginx que se ejecuta en / opt / nginx / sbin.

compruebe los archivos /opt/nginx/conf/nginx.conf y /etc/nginx/nginx.conf y verifique que coincidan.

Ajuste el archivo de inicio /etc/init.d/nginx para que coincida con la prueba de ubicación 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

Para detener nginx, consulte el manual de cómo hacerlo man nginx.

La forma predeterminada debería ser utilizar la señal de parada con nginx -s stop.

Debería ser así de simple realmente. Sus opciones son:

stop, quit, reopen, reload.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.