Ubuntu 14.04 LTSとnginxをDigital Ocean VPSで実行していて、cronジョブの失敗に関する次のメールをときどき受信します。
Subject
Cronテスト-x/usr/sbin/anacron || (cd/&& run-parts --report /etc/cron.daily)
メールの本文は次のとおりです。
/etc/cron.daily/logrotate:エラー: '/var/log/nginx/*.log'の共有postrotateスクリプトの実行中にエラーが発生しましたrun-parts:/etc/cron.daily/logrotateが戻りコード1で終了しました
これを解決するにはどうすればよいですか?
更新:
/var/log/nginx/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi
endscript
postrotate
invoke-rc.d nginx rotate >/dev/null 2>&1
endscript
}
更新:
$ Sudo invoke-rc.d nginx rotate
initctl: invalid command: rotate
Try `initctl --help' for more information.
回転後のアクションが正しくないようです
試す
invoke-rc.d nginx reload >/dev/null 2>&1
nginx
コマンドを見ると、コマンドが受け入れるアクションがわかります。また、あなたが受け取ったメッセージには、チェックinitctl --help
xtian@fujiu1404:~/tmp$ initctl help
Job commands:
start Start job.
stop Stop job.
restart Restart job.
reload Send HUP signal to job.
status Query status of job.
list List known jobs.
したがって、リロードが機能し、HUP信号をnginxに送信して、ログファイルを強制的に再度開く必要があります。
別の答えで述べたように、問題はinvoke-rc.d nginx rotate
は、rotate
アクションがサポートされていないことを示すエラーを返します。興味深いのはservice nginx rotate
は問題なく動作します。
私の推測では、invoke-rc.d
ラッパーは、実際のnginx initスクリプトがサポートするすべてのアクションをサポートしているわけではありません。
変更invoke-rc.d nginx rotate
からservice nginx rotate
が問題を解決するはずです。
initctl
はrotate
オプションをサポートしていないので、それが削除されたのは確かですが、影響を受けたのはあなただけではなく、未解決のバグレポートがあります。これをランチパッドで。
上記および以下の他の回答で言及されているように、nignx logrotateファイルを編集して問題の行を置き換えることができます
invoke-rc.d nginx reload >/dev/null 2>&1
機能する他の選択肢と、
start-stop-daemon --stop --signal USR1 --quiet --pidfile /run/nginx.pid --name nginx
# or
service nginx rotate >/dev/null 2>&1
# or
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
どの方法を選択した場合でも、パッケージによって管理されているファイルを変更するのではなく、変更後は更新されないため、手動で差分を解決するか、ファイルを上書きする必要があります。新しいもの(すべての準備ができており、修正が含まれています)。
私のために働いた:
交換postrotate invoke-rc.d nginx rotate >/dev/null 2>&1
とpostrotate service nginx rotate >/dev/null 2>&1
交換:
invoke-rc.d nginx reload >/dev/null 2>&1
と:
[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
nginxの新しいバージョンではこのように機能します。 1.9バージョンを実行しています。