Eu quero parar o Nginx, mas ele falha assim.
$ sudo service nginx stop
Stopping nginx: [FAILED]
E nginx.conf
isso define o lugar do nginx.pid ter 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 updatedb
não há correspondência para a pesquisa. Estou usando 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
dá esse erro. Acho que nginx
não inicia porque o velho ainda está vivo. E /var/log/nginx/error.log-2014017
contém também este 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]
Eu recomendarei parar o nginx matando seu processo mestre primeiro. O nginx não está desligado corretamente pode ser por causa disso, ele não pode ser interrompido usando o script init.
Isso mostrará o PID do processo mestre do nginx. Como você mencionou acima:
Mate-o usando
Verifique novamente se há algum processo nginx em execução ou se a porta 80 está ocupada. Se você vir algum processo vinculado à porta 80, identifique o PID e verifique se ele pode ser eliminado.
certifique-se de que o sistema de arquivos está bem e você pode ler/gravar no sistema de arquivos /var. Em seguida, inicie o nginx
Problema
Para mim, o nome do arquivo pid era diferente nesses dois arquivos:
pid /var/run/nginx.pid;
PIDFile=/run/nginx.pid
Esses dois precisam combinar.
Fixar:
Então eu ajustei em /usr/lib/systemd/system/nginx.service e depois fiz:
Então apareceu direitinho.
Eu tive esse problema e a execução
ps -ef | grep nginx
me mostraria trabalhadores que continuariam girando, apesar de matar o processo mestre, conforme sugerido pela resposta aceita:Então , minha solução para corrigi-lo foi simplesmente isso:
pkill nginx && service nginx restart
Meu problema era que eu havia
pid
especificado em dois arquivos conf diferentes. Depois que eu removi uma referência, apaguei o.pid
arquivo e iniciei o nginx novamente, ele começou a se comportar normalmente.Isso parece indicar que o nginx está travando imediatamente, se tiver sido iniciado antes. 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 sistema operacional e a versão do nginx, podemos fornecer respostas mais detalhadas.
Eu precisaria de mais informações para ter certeza, mas suponho que você já tenha outro servidor da Web em execução em vez da instância do ngnix que você deseja, então você precisa encontrá-lo - o erro diz que a porta 80 está em uso, mas não por o que
Tente
netstat -tulpn
- Você está procurando uma entrada no endereço local que termine com :80 - isso também fornecerá o nome do programa e o PID para que você possa identificá-lo. Aqui está o meu - estou executando o lighttpd e é mostrado na 3ª linha.Encerre o outro servidor da web corretamente (já que, se ele for inicializado, 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 seja iniciado ou ajustar sua configuração em outro poder.
Eu tive um problema semelhante 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 /etc/init.d/nginx para corresponder ao teste de localização nginx.pid usando:
Para parar o nginx consulte o manual de como fazê-lo
man nginx
.A maneira padrão deve ser usar o sinal de parada com
nginx -s stop
.Deve ser tão simples realmente. Suas opções são:
Tente isto:
Encontrei aqui: https://www.digitalocean.com/community/questions/nginx-is-unable-to-bind-to-443