Como zerar o tempo de inatividade reiniciar o servidor nginx

0

Como enviar o sinal do HUP e o servidor nginx de reinicialização com tempo de inatividade zero usando o arquivo Node.js

    
por Ritesh Pradhan 31.03.2015 / 13:55

2 respostas

2

Você precisa de três coisas:

  1. O PID do seu servidor nginx. Armazenado em: /var/run/nginx.pid

  2. Um comando para enviar um SIGHUP ( 1 ) para o processo com esse PID:

    kill -1 $(cat /var/run/nginx.pid)
    
  3. Uma maneira de o node.js enviar o kill . Eu iria com um processo filho .

Eu não sou um desenvolvedor de nós. Não tenho como colocá-los juntos em algo que faça sentido, mas é o que você faria se soubesse o que estava fazendo.

Ah, e o seu servidor nginx e o aplicativo Node.JS precisam estar rodando como o mesmo usuário para permitir que o Node envie o sinal . Isso é facilmente feito, mas pode ter ramificações de segurança. Você pode, em vez disso, querer fazer um script SUID para o Node chamar, mas, se feito de maneira descuidada, isso também pode ter ramificações de segurança.

Como alternativa, você pode usar o % móduloprocess para executar process.kill(...) . Você ainda precisará ler o PID para o nginx e as permissões ainda precisam ser classificadas.

Algo parecido com isto (mais uma vez, eu ainda não sou um Node dev, então isso pode estar sintaticamente incorreto):

var fs = require('fs'),
    process = require('process');

process.kill(fs.readFileSync('/var/run/nginx.pid', "utf8"), 'SIGHUP');
    
por Oli 31.03.2015 / 14:22
0
  1. crie um arquivo dentro de /etc/sudoers.d/ . Chame-o de reload-nginx
  2. Coloque o seguinte com as seguintes linhas dentro de reload-nginx . %dev é o grupo de usuários de vários usuários que podem querer recarregar o nginx. Você também pode restringir esse privilégio a um único usuário

%dev ALL=(ALL) NOPASSWD: /bin/systemctl reload nginx.service %dev ALL=(ALL) NOPASSWD: /bin/systemctl reload nginx

Assim que isso for feito, qualquer pessoa pertencente ao grupo %dev poderá recarregar o nginx sem digitar sua senha. Você pode testar isso imediatamente na linha de comando.

Adicione entradas para o usuário sob o qual o nodejs será executado e, em seguida, use o módulo nodejs ' child_process para invocar comandos shell do unix como sudo systemctl reload nginx . Isso deve fazer o truque.

    
por Sai Ramachandran 09.07.2017 / 04:47