我需要启用 Jenkins 的 logrotate 服务来轮换其日志文件 (/var/log/jenkins/jenkins.log)。因此,我在 /etc/logrotate.d 中配置了一个具有正确权限的脚本:
/var/log/jenkins/jenkins.log {
hourly
copytruncate
missingok
rotate 8
compress
delaycompress
size 5G
}
对于每个 logrotate 脚本来说,权限为 644,所有者为 root。
logrotate 服务正常运行,但 Jenkins 却无法正常运行。没有日志文件被轮换!
因此,我尝试直接在 root 的 crontab 中插入命令:
0 * * * * logrotate --force /etc/logrotate.d/jenkins
但是,即使 cron 服务按照 cron 日志每小时都正常运行,这个命令也根本不起作用:
cat /var/log/syslog | grep logrotate
[...]
Jun 4 09:00:01 CI-prod CRON[11794]: (root) CMD (logrotate --force /etc/logrotate.d/jenkins)
Jun 4 10:00:01 CI-prod CRON[525]: (root) CMD (logrotate --force /etc/logrotate.d/jenkins)
但是,如果我手动执行 logrotate 命令(logrotate --force /etc/logrotate.d/jenkins),它可以正常工作,并且 Jenkins 日志可以按照脚本毫无问题地轮换。
请问你能帮助我吗?
以下是其他有用信息:
- 操作系统:Ubuntu 16.04.1 LTS
- Jenkins 版本:2.121.2
- Java 版本:1.8.0_121
答案1
crontab 有受限环境,因此尝试使用绝对路径并将命令输出重定向到文件中,这将在出现错误时为您提供帮助。
0 * * * * /usr/sbin/logrotate --force /etc/logrotate.d/jenkins > /tmp/outfile.log 2>&1