cronジョブでnginx logrotateエラー

cronジョブでnginx logrotateエラー

私はDigital Ocean VPSでUbuntu 14.04 LTSとnginxを実行しています。

トピック

cron test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

電子メールの本文は次のとおりです。

/etc/cron.daily/logrotate: エラー: '/var/log/nginx/*.log' の共有 postrotate スクリプトの実行中にエラーが発生しました。実行部分:/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.

答え1

回転後の作業が間違っているようです。

努力する

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

答え2

他の回答で述べたように、問題はタスクがサポートされていないという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これが影響を受ける唯一の人ではなく、Launchpadにこの問題に関する一般的なバグレポートがあります。

上記と他の答えで述べたように、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`

どの方法を選択しても、パッケージが管理するファイルを変更していることに注意してください。ファイルを変更した後は更新されなくなり、違いを手動で解決するか、新しいファイルに置き換える必要があります(つまり、修正を含める準備ができています)。

答え4

変える:

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

そして:

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

最新バージョンのNginxではこれがうまくいくようです。バージョン 1.9 を実行しています。

関連情報