como recarregar nginx - systemctl ou nginx -s?

15

Existe uma diferença entre chamar

systemctl reload nginx

e chamando

nginx -s reload

?

Eu sei que, além do systemd, existem outros sistemas init como o SysV e o Upstart. Então talvez essa questão se aplique a eles também.

É preferível emitir este comando através do sistema init ou posso apenas chamar o próprio nginx?

Obrigado antecipadamente

    
por moonring 04.02.2014 / 00:39

2 respostas

17

Você pode descobrir o que o systemd reload nginx fará observando a opção ExecReload= na seção [Service] no arquivo nginx.service unit (localizado em /usr/lib/systemd/system/nginx.service em meu sistema):

$ systemctl cat nginx | grep ExecReload=

Ou executando:

$ systemctl show nginx.service --property=ExecReload

No meu sistema, recebo:

ExecReload=/usr/bin/kill -HUP $MAINPID

De nginx(8) :

-s signal      Send a signal to the master process. The argument signal
               can be one of: stop, quit, reopen, reload. The following
               table shows the corresponding system signals:

               stop    SIGTERM
               quit    SIGQUIT
               reopen  SIGUSR1
               reload  SIGHUP

Assim, systemctl reload nginx e nginx -s reload irão, quase , fazer o mesmo.

As diferenças são:

  • systemctl reload nginx executará o comando em um ambiente limpo (e não no ambiente atual do usuário);
  • systemctl reload funciona para qualquer serviço que o permita (que foi configurado no arquivo da unidade). Não há necessidade de lembrar comandos específicos do serviço. Isso é ainda mais interessante se você tiver várias instâncias de um serviço.

Usar os scripts service ou init.d são formas legadas / obsoletas de fazer a mesma coisa. Embora possam funcionar, eles não são mais suportados nem recomendados em um sistema baseado em systemd.

    
por 08.08.2015 / 17:53
1

Atualmente, há uma diferença no Centos 7 e no RHEL 7. Usar o systemctl reload nginx NÃO validará sua configuração.

Veja o seguinte bug: link

Por isso, aconselho usar o recarregamento do nginx -s ou atualizar o arquivo da unidade nginx para usar o seguinte comando reload:

ExecReload=/usr/sbin/nginx -s reload

link

    
por 18.05.2018 / 13:49