web-dev-qa-db-fra.com

comment recharger nginx - systemctl ou nginx -s?

Y a-t-il une différence entre appeler

systemctl reload nginx

et appeler

nginx -s reload

?

Je sais que, outre systemd, il existe d'autres systèmes d'initialisation tels que SysV et Upstart. Alors peut-être que cette question s'applique à eux aussi.

Est-il préférable d’émettre cette commande via le système init ou puis-je appeler nginx lui-même?

Merci d'avance

22
moonring

Vous pouvez savoir ce que systemd reload nginx fera en consultant l'option ExecReload= dans la section [Service] du fichier unité nginx.service (situé à /usr/lib/systemd/system/nginx.service sur mon système):

$ systemctl cat nginx | grep ExecReload=

Ou en exécutant:

$ systemctl show nginx.service --property=ExecReload

Sur mon système, je reçois:

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

Ainsi, systemctl reload nginx et nginx -s reload feront presque la même chose.

Les différences sont:

  • systemctl reload nginx exécutera la commande dans un environnement propre (et non dans l'environnement utilisateur actuel);
  • systemctl reload fonctionne pour tout service qui le permet (qui l'a configuré dans le fichier d'unité). Pas besoin de se rappeler des commandes spécifiques au service. Ceci est encore plus intéressant si vous avez plusieurs instances d'un service.

L'utilisation de scripts service ou init.d est une méthode héritée/obsolète de faire la même chose. Bien qu'ils puissent fonctionner, ils ne sont plus supportés ni recommandés sur un système basé sur systemd.

21
Siosm

Il existe actuellement une différence entre Centos 7 et RHEL 7. L'utilisation de systemctl reload nginx NE validera PAS votre configuration.

Voir le bogue suivant: https://bugzilla.redhat.com/show_bug.cgi?id=1565377

Je conseillerais donc d'utiliser nginx -s reload ou de mettre à jour votre fichier d'unité nginx pour utiliser la commande de rechargement suivante:

ExecReload=/usr/sbin/nginx -s reload

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

3