cronジョブでのnginx logrotateエラー


10

私は、Ubuntu 14.04 LTSとnginxをDigital Ocean VPSで実行しており、cronジョブの失敗に関する次のメールをときどき受け取ります。

件名

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.

postrotateアクションとして指定されたものを実行できないようです。/etc/logrotate.d/nginixスクリプトを表示してください
X Tian

/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]; 次に、\ run-parts /etc/logrotate.d/httpd-prerotate; \ fi \ endscript postrotate invoke-rc.d nginx rotate> / dev / null 2>&1 endscript}
Chris

1
リクエストに応じて、質問を詳細情報で更新するのは正常です。各行の先頭に4つのスペースがあると、コードブロックになります。
X Tian

だから、invoke-rc.d nginx rotate失敗している、あまりにも私たちにそのスクリプトを表示し、適切なユーザーとして、そして、あなたの元の質問に出力を貼り付けることを実行してみてください。tks。
X Tian

実行しようとしましたが、無効なコマンドエラーを受け取りました。
Chris

回答:


10

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

やってみる

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に送信する必要があります。


ありがとう、そのコマンドはエラーなしで実行されたようです。cronジョブを更新し、そこから移動します。
クリス

4

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

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

に変更すると、問題が解決invoke-rc.d nginx rotateするservice nginx rotateはずです。


3

それはので、どうかはわからない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`

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


「サービスコマンドが機能しない」というバグがここに当てはまるかどうかはわかりません。それぞれのバグで対処されるさまざまな問題があるからです。(楽しい事実:1450770の作業は修正済みです)
トーマスウォード

1

私の仕事:
置き換え
postrotate invoke-rc.d nginx rotate >/dev/null 2>&1

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


0

交換:

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

と:

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.