呼び方に違いはありますか?
systemctl reload nginx
and calling
nginx -s reload
?
私は、systemd以外にもSysVやUpstartのようなinitシステムがあることを知っています。なので、この質問はそれらにも当てはまるのかもしれません
このコマンドはinitシステムから発行するのが望ましいのでしょうか、それともnginx自体を呼び出すことができるのでしょうか?
宜しくお願いします
25 moonring 2014-02-03
systemd reload nginx
が何をするかは、nginx.service
のユニットファイル(私のシステムでは/usr/lib/systemd/system/nginx.service
にあります)の[Service]
セクションのExecReload=
オプションを見ればわかります
$ systemctl cat nginx | grep ExecReload=
あるいは走ることで
$ systemctl show nginx.service --property=ExecReload
私のシステムでは
ExecReload=/usr/bin/kill -HUP $MAINPID
From 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 ベースのシステムではサポートされていませんし、推奨もされていません
26 Timothée Ravier 2015-08-08
現在、Centos 7とRHEL 7では違いがあります。systemctl reload nginx を使用しても設定は検証されません
以下のバグを参照してください。https://bugzilla.redhat.com/show_bug.cgi?id=1565377
そこで、私は nginx -s reload を使うか、または nginx のユニットファイルを更新して、以下の reload コマンドを使うことをお勧めします
ExecReload=/usr/sbin/nginx -s reload
6 Stijn Diependaele 2018-05-18
systemctl
では成功しませんでした。しかし、nginxの設定をリロードするためには、マスタープロセス[1]にHUP
を送ることができます。私たちは killall
(killではなく、シグナルを送信します) を使って、すべてのnginxプロセスに HUP
を送信しています。ワーカーはHUPを無視しているだけだと思います
sudo killall -s HUP nginx
これで完成です。新しい設定が読み込まれ、適用されます
[1] http://nginx.org/en/docs/control.html
0 Marc 2020-08-05