web-dev-qa-db-ja.com

nginx-systemctlまたはnginx -sをリロードする方法?

呼び出しに違いはありますか

systemctl reload nginx

そして呼び出す

nginx -s reload

Systemd以外にも、SysVやUpstartなどの他のinitシステムがあることは知っています。したがって、おそらくこの質問は彼らにも当てはまります。

Initシステムからこのコマンドを発行するのが望ましいですか、それともnginx自体を呼び出すだけですか?

前もって感謝します

24
moonring

systemd reload nginxユニットファイル(私のシステムではExecReload=にあります)の[Service]セクションにあるnginx.serviceオプションを見ると、/usr/lib/systemd/system/nginx.serviceが何をするかがわかります。

$ systemctl cat nginx | grep ExecReload=

または実行することにより:

$ systemctl show nginx.service --property=ExecReload

私のシステムでは、次のようになります。

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

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

したがって、systemctl reload nginxnginx -s reloadほぼで同じことを行います。

違いは次のとおりです。

  • systemctl reload nginxは、(現在のユーザー環境ではなく)クリーンな環境でコマンドを実行します。
  • systemctl reloadは、それを許可するサービス(ユニットファイルで構成されている)で機能します。サービス固有のコマンドを覚えておく必要はありません。サービスのインスタンスが複数ある場合、これはさらに興味深いものです。

serviceまたはinit.dスクリプトの使用は、同じことを行うレガシー/非推奨の方法です。それらは機能するかもしれませんが、systemdベースのシステムではサポートされておらず、推奨もされていません。

24
Siosm

現在、Centos 7とRHEL 7では違いがあります。systemctlreload nginxを使用しても、構成は検証されません。

次のバグを参照してください: https://bugzilla.redhat.com/show_bug.cgi?id=1565377

そのため、nginx -s reloadを使用するか、次のreloadコマンドを使用するようにnginxユニットファイルを更新することをお勧めします。

ExecReload=/usr/sbin/nginx -s reload

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

6