呼び出しに違いはありますか
systemctl reload nginx
そして呼び出す
nginx -s reload
?
Systemd以外にも、SysVやUpstartなどの他のinitシステムがあることは知っています。したがって、おそらくこの質問は彼らにも当てはまります。
Initシステムからこのコマンドを発行するのが望ましいですか、それともnginx自体を呼び出すだけですか?
前もって感謝します
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 nginx
とnginx -s reload
はほぼで同じことを行います。
違いは次のとおりです。
systemctl reload nginx
は、(現在のユーザー環境ではなく)クリーンな環境でコマンドを実行します。systemctl reload
は、それを許可するサービス(ユニットファイルで構成されている)で機能します。サービス固有のコマンドを覚えておく必要はありません。サービスのインスタンスが複数ある場合、これはさらに興味深いものです。service
またはinit.d
スクリプトの使用は、同じことを行うレガシー/非推奨の方法です。それらは機能するかもしれませんが、systemdベースのシステムではサポートされておらず、推奨もされていません。
現在、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