Ubuntu

cron作業上的nginx logrotate錯誤

  • April 5, 2019

我在 Digital Ocean VPS 上執行 Ubuntu 14.04 LTS 和 nginx,偶爾會收到這些關於 cron 作業失敗的電子郵件:

學科

cron 測試 -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.

旋轉後操作似乎不正確

嘗試

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.

所以重新載入應該可以工作並向 nginx 發送 HUP 信號以強制重新打開日誌文件。

正如另一個答案中提到的,問題在於invoke-rc.d nginx rotate返回一個錯誤,指出該rotate操作不受支持。有趣的是,它service nginx rotate可以毫無問題地工作。

我的猜測是invoke-rc.d包裝器不支持實際 nginx 初始化腳本支持的所有操作。

更改invoke-rc.d nginx rotateservice nginx rotate應該可以解決問題。

引用自:https://unix.stackexchange.com/questions/209585