comment recharger nginx - systemctl ou nginx -s?

24

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 comme 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 simplement appeler nginx lui-même?

Merci d'avance

moonring
la source
1
En fait, si votre système le prend en charge, je préférerais utiliser serviceou init.d, commesudo service nginx reload
Mohammad AbuShady

Réponses:

23

Vous pouvez découvrir ce qui systemd reload nginxva faire en regardant l' ExecReload=option dans la [Service]section dans le nginx.servicefichier d'unité (situé sur /usr/lib/systemd/system/nginx.servicesur 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 nginxet nginx -s reloadfera presque la même chose.

Les différences sont les suivantes:

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

L'utilisation de scripts serviceou init.dsont des méthodes héritées / obsolètes de faire la même chose. Bien qu'ils puissent fonctionner, ils ne sont plus pris en charge ni recommandés sur un système basé sur systemd.

Siosm
la source
5

Actuellement, il existe une différence sur 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 vous conseille 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

Stijn Diependaele
la source