como recarregar nginx - systemctl ou nginx -s?

24

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 pergunta se aplique a eles também.

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

desde já, obrigado

moonring
fonte
11
Na verdade, se o seu sistema suporta, eu preferiria usar serviceou init.d, comosudo service nginx reload
Mohammad AbuShady

Respostas:

23

Você pode descobrir o que systemd reload nginxfará consultando a ExecReload=opção na [Service]seção no nginx.servicearquivo da unidade (localizada /usr/lib/systemd/system/nginx.serviceem 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 nginxe nginx -s reloadirá, quase , fazer a mesma coisa.

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 reloadfunciona para qualquer serviço que permita (que o tenha configurado no arquivo da unidade). Não há necessidade de lembrar comandos específicos de serviço. Isso é ainda mais interessante se você tiver várias instâncias de um serviço.

O uso serviceou init.dscripts são maneiras herdadas / obsoletas de fazer a mesma coisa. Embora possam funcionar, eles não são mais suportados nem recomendados em um sistema baseado em systemd.

Siosm
fonte
5

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

Veja o seguinte bug: https://bugzilla.redhat.com/show_bug.cgi?id=1565377

Portanto, aconselho o uso do nginx -s reload ou a atualização do arquivo da unidade nginx para usar o seguinte comando reload:

ExecReload=/usr/sbin/nginx -s reload

https://bugzilla.redhat.com/attachment.cgi?id=1419614&action=diff

Stijn Diependaele
fonte