Nginx falha ao parar e nginx.pid está faltando

31

Eu quero parar o Nginx, mas ele falha assim.

$ sudo service nginx stop
Stopping nginx:                                            [FAILED]

E nginx.conf que define o lugar de nginx.pid tem uma linha.

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

Mas não há nginx.pid no diretório /var/run/ .

locate nginx.pid mostra esta saída.

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

Mas depois de updatedb , não há correspondência para a pesquisa. Estou usando o nginx / 1.4.4 em CentOS release 6.5 (Final) .

O que devo fazer para parar o daemon nginx?

Editar 2014/01/07

Esta é a saída de ps -ef | grep nginx , parece que o daemon nginx ainda está em execução.

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 restart apresenta este erro. Eu acho que nginx falha em iniciar porque o antigo ainda está vivo. E /var/log/nginx/error.log-2014017 também contém esse erro.

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]
    
por ironsand 06.01.2014 / 15:13

8 respostas

30

Eu recomendarei parar o nginx matando o processo mestre primeiro. O nginx não está desligado corretamente pode ser por causa disso não pode ser parado usando o script de inicialização.

ps -ef |grep nginx

Isso mostrará o PID do processo mestre nginx. Como você mencionou acima:

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

Mate-o usando

kill -9 19506

Verifique novamente se existe algum processo nginx em execução ou se a porta 80 está ocupada. Se você vir algum processo ligado à porta 80, identifique o PID e verifique se ele pode ser eliminado.

ps -ef |grep nginx

netstat -tulpn |grep 80

Certifique-se de que o sistema de arquivos está correto e você pode ler / gravar no sistema de arquivos / var. Em seguida, inicie o nginx

service nginx start

    
por 07.01.2014 / 08:46
9

Problema

Para mim, o nome do arquivo pid era diferente nesses dois arquivos:

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

Esses dois precisam corresponder.

Correção:

Então eu ajustei em /usr/lib/systemd/system/nginx.service e depois fiz:

systemctl daemon-reload
systemctl start nginx

Então surgiu corretamente.

    
por 15.07.2016 / 10:57
7

Eu tive esse problema, e executar ps -ef | grep nginx me mostraria trabalhadores que continuariam girando, apesar de ter matado o processo mestre como sugerido pela resposta aceita:

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

Então, minha solução para consertar, foi simplesmente isto: pkill nginx && service nginx restart

    
por 14.10.2015 / 21:58
1

Meu problema é que eu tinha pid especificado em dois arquivos conf diferentes. Depois que eu removi uma referência, excluí o arquivo .pid e reiniciei o nginx, ele começou a se comportar normalmente.

    
por 18.04.2016 / 00:51
0

Isto parece indicar que o nginx está a falhar imediatamente, se tiver sido iniciado anteriormente. Você verificou o conteúdo de /var/log/nginx* para ver o que o processo está fazendo?

EDIT: Além disso, se você nos informar seu SO e versão do nginx, podemos dar respostas mais detalhadas.

    
por 06.01.2014 / 17:21
0

Eu precisaria de mais informações para ter certeza, mas, eu suponho que você já tenha outro servidor web em execução, em vez da instância do ngnix que você quer, então você precisa encontrá-lo - o erro diz que a porta 80 está em uso, mas não pelo que

Tente netstat -tulpn - Você está procurando uma entrada no endereço local que termina com: 80 - isso também fornecerá o nome do programa e o PID para que você possa identificá-lo. Aqui está o meu - Estou rodando lighttpd e é mostrado na terceira linha.

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

Encerre o outro servidor web corretamente (já que, se o seu arranque for iniciado, um 'kill' normal pode não funcionar) e tente iniciar o ngnix. Se for esse o caso, você pode / deve editar seus scripts de inicialização para impedir que o outro servidor da Web inicie ou ajustar sua configuração em outra energia.

    
por 07.01.2014 / 08:45
0

Eu tive um problema parecido com o Ubuntu 10.10 e uma versão compilada do nginx rodando em / opt / nginx / sbin.

Verifique os arquivos /opt/nginx/conf/nginx.conf e /etc/nginx/nginx.conf e verifique se eles correspondem.

Ajuste o arquivo de inicialização do /etc/init.d/nginx para corresponder à localização do nginx.pid teste 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
    
por 26.04.2018 / 17:22
0

Para parar o nginx, verifique o manual como fazer man nginx .

A maneira padrão deve ser usar o sinal de parada com nginx -s stop .

Deve ser assim tão simples. Suas opções são:

stop, quit, reopen, reload.
    
por 14.08.2018 / 18:25