linux – どのようにnginxをリロードするか – systemctlまたはnginx -s?

linux nginx systemd

呼び方に違いはありますか?

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 nginxnginx -s reloadは、ほとんど、同じことをすることになります

違いがあるのです

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

serviceinit.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
Attachment 1419614 Details for Bug 1565377 – suggested patch

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


タイトルとURLをコピーしました