Nginx -s sair não faz nada após a atualização 1.8, como depurar e / ou encontrar o problema?

2

A premissa desta questão é infelizmente vaga, mas não consigo identificar uma questão mais específica. Eu atualizei uma máquina do nginx 1.6.3 para 1.8 e agora emitindo um nginx -s quit literalmente nada. O comando não fornece saída, os arquivos access_log e error_log não mostram nada de anormal, mesmo com o nível de depuração ativado em todos os vhosts . Também não há nada em /var/log/nginx/error.log além dos avisos de "processo de sinal iniciado". pgrep nginx mostra que os processos permanecem lá como se nada tivesse acontecido.

Eu entendo que o sinal de saída não necessariamente pare o nginx imediatamente, já que ele deve ser encerrado graciosamente , mas o problema aqui é que mesmo que a máquina esteja protegida por firewall, isolada e não processe solicitações, nginx -s quit ainda não faz nada. Sob as mesmas condições exatas com 1.6.3, os processos param imediatamente.

Eu estou em uma perda completa de como depurar este problema e encontrar a causa raiz, mas obviamente algo está errado. Qualquer ajuda para me apontar na direção certa seria muito apreciada.

Editar: o comportamento que estamos vendo é o seguinte, passo a passo:

  1. apt-get atualizar / atualizar uma máquina com o nginx 1.6.3 para 1.8 (quando solicitado, instale o novo /etc/nginx/nginx.conf)
  2. sudo nginx -s quit pela primeira vez funciona como esperado
  3. sudo service nginx start traz o nginx de volta como esperado
  4. sudo nginx -s quit pela segunda vez não faz mais nada e permanecerá assim mesmo após a reinicialização

Testamos isso várias vezes em uma VM e os resultados são consistentes. Talvez seja um bug no 1.8?

    
por Mahn 11.05.2015 / 19:15

1 resposta

0

Por algum motivo que ainda não localizamos, em nosso ambiente, o nginx cria dois arquivos pid: /run/nginx.pid e /var/run/nginx.pid . Isso parece acontecer independentemente da versão nginx, então parece que não é um bug nginx em si.

A execução de nginx -s quit não mata e exclui os pids como deveria, mas service nginx stop sim. Então, para fazer uma reinicialização elegante em uma versão nginx atualizada, temos que executar ambas:

  1. sudo nginx -s quit
  2. sudo service nginx stop (depois de um minuto ou mais para dar tempo para a graciosa saída)
  3. sudo service nginx start

Os sinais quit subseqüentes funcionarão bem, contanto que o nginx seja interrompido por meio do comando service para garantir que os pids não fiquem disponíveis.

    
por 09.07.2016 / 19:18

Tags