2016-03-31 7 views
1

私が見つける:Nginxはlog-rotateで殺された後どのように再起動しますか? <code>/etc/logrotate.d/nginx</code>で

/var/log/nginx/*.log { 
    daily 
    missingok 
    rotate 52 
    compress 
    delaycompress 
    notifempty 
    create 640 nginx adm 
    sharedscripts 
    postrotate 
     [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid` 
    endscript 
} 

それは私は好奇心だpostrotateコマンドです。

これは、ログが正常にローテーションされると、nginxプロセスを強制終了することを意味しています。

再起動するとわかりますnginx新しいログが作成されます。

私が解決できないことは、プロセスが自動的にどのように再開され、ウェブページの配信に何らかの障害があるかどうかです。

答えて

2

logrotate毎日のcronジョブとして実行すると、ログファイルの名前が/var/log/nginx/*.logに変更されます。 その後、nginxは元のログファイルにエラーログまたはアクセスログを出力できません。 (詳細については、この回答の@ mataのコメントを参照してください。)USR1この問題を解決するには、ログファイルを再度開くために、nginxにシグナルを送る必要があります。 だからpostrotateUSR1をnginxマスターに送ります。このシグナルはnginxを殺すものではありません。

信号でnginxを制御する方法の詳細については、this documentを参照してください。

+1

元のファイルに書き込むことはできません。実際にはファイルハンドルが開いている限り、ファイル名が変更されていても問題ありませんUSR1信号を使用して古いファイルを閉じて新しいログファイルを開くように指示する必要があります。 – mata

+0

@mata、はい、あなたの説明はより詳細です:) – xiaochen

+0

ああ。 [man](http://linux.die.net/man/1/kill)を読むと、コマンドは 'kill -s USR1 ...'でなければなりません。 '-s'をスキップする理由は何ですか? –

関連する問題