LoginSignup
41
28

More than 5 years have passed since last update.

nginx に USR1 シグナルを送ってログを開き直す

Last updated at Posted at 2016-07-12

USR1 シグナルとは

kill コマンドでプロセスに送信できるシグナルの一つです。
シグナルでは -9 (or -SIGKILL), -15 (or -SIGTERM) あたりが有名ですが、 USR1USeR defined なシグナルです。このシグナルを受けた時のプロセスの挙動は、アプリケーションが自由に設定する事ができます。

nginx では 公式ドキュメント にある通り、このシグナルを送信するとログファイルを再度掴み直してくれます。

使用例1
$ sudo kill -USR1 `pgrep nginx`

注意点

ただし一つ注意点が。

ログを格納しているディレクトリの権限を 755 にしておく必要があります。

# default
$ ls -la /var/log/
..
drwxr-x---  2 www-data  adm         4096 Jul 12 06:38 nginx/
..
$ sudo chmod 755 /var/log/nginx
$ ls -la /var/log/
..
drwxr-xr-x  2 www-data  adm         4096 Jul 12 06:38 nginx/
..

第三者に実行権限を付与する所がポイントです。

理由ですが、 nginx の worker process は ubuntu では nobody というユーザで実行されています。
このユーザは ubuntu 側で用意された、権限をコントロールされたユーザ です。例えば nginx プロセスが悪意のあるユーザに乗っ取られても被害が最小限に抑えられるようになっています。

第三者に実行権限を付与せずにログローテーション&USR1を送信した場合の結果がこちらです。

$ for pid in `pgrep nginx`; do sudo lsof -p $pid | grep log;done;                                                                                                                                                                   
nginx   31014 root    2w   REG              202,1        0   160375 /var/log/nginx/error.log
nginx   31014 root    5w   REG              202,1        0   160366 /var/log/nginx/access.log
nginx   31014 root   10w   REG              202,1        0   160375 /var/log/nginx/error.log
nginx   31015 nobody    2w   REG            202,1     1230   164619 /var/log/nginx/error.log-20160712
nginx   31015 nobody    4w   REG            202,1  2468461   164113 /var/log/nginx/access.log-20160712
nginx   31015 nobody    5w   REG            202,1     1230   164619 /var/log/nginx/error.log-20160712
nginx   31016 nobody    2w   REG            202,1     1230   164619 /var/log/nginx/error.log-20160712
nginx   31016 nobody    4w   REG            202,1  2468461   164113 /var/log/nginx/access.log-20160712
nginx   31016 nobody    5w   REG            202,1     1230   164619 /var/log/nginx/error.log-20160712

master プロセスは新しいログファイルを掴み直していますが、 worker プロセスは依然昔のログを掴んだままになっています。

nginx usr1 not working」あたりでググるといっぱい回答が出てきますが、意外とこの回答が見つからなかったので記載しておきます。

41
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41
28