cron作业上的nginx logrotate错误


10

我在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.

看起来无法执行指定为postrotate的操作,请向我们显示您的/etc/logrotate.d/nginix脚本
X Tian

/var/log/nginx/*.log {如果[-d /etc/logrotate.d/httpd-prerotate],则预旋转0640 www-data adm共享脚本;然后\ run-parts /etc/logrotate.d/httpd-prerotate; \ fi \ endscript postrotate invoke-rc.d nginx rotation> / dev / null 2>&1 endscript}
Chris

1
在要求时用更多信息更新您的问题是正常的。每行开头的4个空格使其成为代码块。
X

因此,invoke-rc.d nginx rotate如果失败了,请尝试以适当的用户身份运行它,并向我们展示该脚本,然后将输出粘贴到您的原始问题中。tks。
X

尝试运行它,收到无效的命令错误。
克里斯(Chris

Answers:


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.

因此重新加载应该可以正常工作,并向Nginx发送HUP信号以强制重新打开日志文件。


谢谢,该命令似乎已正确运行。我将更新cron作业,然后我们再去那里。
克里斯(Chris

4

如另一个答案中所述,问题是invoke-rc.d nginx rotate返回错误,指出该rotate操作不受支持。有趣的是,它service nginx rotate可以正常工作。

我的猜测是invoke-rc.d包装器不支持实际的nginx初始化脚本支持的所有动作。

更改invoke-rc.d nginx rotateservice 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的修复程序)
Thomas Ward

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版本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.