我在 Aws ec2 实例上运行了一个 logrotate,它尝试每小时轮换 /var/log/tomcat8/ 下的日志。我在 /etc/logrotate.d/rotate_tomcat 下有以下配置:
"/var/log/tomcat8/localhost_access_log.*-*-*.txt" "/var/log/tomcat8/catalina.*-*-*.log" "/var/log/tomcat8/agent-log.*-*-*.json" "/var/log/tomcat8/ldap-query-log.*-*-*.*.json" {
copytruncate
size 1k
rotate 5
compress
missingok
create 0644 tomcat tomcat
}
当我手动运行它时,它按预期工作。但是当我将其作为 crond 运行时,它什么也不做。下面是我在 /etc/crond.d/accessLogDeletion 下的 crond 配置
*/2 * * * * root logrotate /etc/logrotate.d/rotate_tomcat
任何意见都值得赞赏。
答案1
问题出在 cron 会话中的 PATH 上。
/bin/sh: 1: logrotate: not found
您可以使用命令的完整路径进行修复:
*/2 * * * * root /usr/sbin/logrotate /etc/logrotate.d/rotate_tomcat >> /var/log/myCron.log 2>&1
或者在 cron 脚本开始时使用 PATH 环境:
PATH=/usr/sbin:/usr/bin:/sbin:/bin
*/2 * * * * root logrotate /etc/logrotate.d/rotate_tomcat >> /var/log/myCron.log 2>&1
像上面那样记录 cron 命令的输出是一种很好的做法。