如何使用 Jenkins 启用日志轮换

如何使用 Jenkins 启用日志轮换

我需要启用 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

相关内容