web-dev-qa-db-ja.com

cronジョブでのnginx logrotateエラー

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.
10
Chris

回転後のアクションが正しくないようです

試す

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に送信して、ログファイルを強制的に再度開く必要があります。

9
X Tian

別の答えで述べたように、問題はinvoke-rc.d nginx rotateは、rotateアクションがサポートされていないことを示すエラーを返します。興味深いのはservice nginx rotateは問題なく動作します。

私の推測では、invoke-rc.dラッパーは、実際のnginx initスクリプトがサポートするすべてのアクションをサポートしているわけではありません。

変更invoke-rc.d nginx rotateからservice nginx rotateが問題を解決するはずです。

4
Robin Smidsrød

initctlrotateオプションをサポートしていないので、それが削除されたのは確かですが、影響を受けたのはあなただけではなく、未解決のバグレポートがあります。これをランチパッドで。

上記および以下の他の回答で言及されているように、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`

どの方法を選択した場合でも、パッケージによって管理されているファイルを変更するのではなく、変更後は更新されないため、手動で差分を解決するか、ファイルを上書きする必要があります。新しいもの(すべての準備ができており、修正が含まれています)。

3
Rabin

私のために働いた:
交換
postrotate invoke-rc.d nginx rotate >/dev/null 2>&1

postrotate service nginx rotate >/dev/null 2>&1

1
Jadeye

交換:

invoke-rc.d nginx reload >/dev/null 2>&1

と:

[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`

nginxの新しいバージョンではこのように機能します。 1.9バージョンを実行しています。

0
bonitarunner