У меня есть logrotate, запущенный на Aws ec2 instance, который пытается вращать журналы в /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, это ничего не делает. Ниже приведен мой конфиг crond в /etc/crond.d/accessLogDeletion
*/2 * * * * * root logrotate /etc/logrotate.d/rotate_tomcat
Любой вклад будет оценен по достоинству.
Проблема связана с PATH в сеансе cron.
/bin/sh: 1: logrotate: not found
Вы можете исправить, указав полный путь к команде:
*/2 * * * * root /usr/sbin/logrotate /etc/logrotate.d/rotate_tomcat >> /var/log/myCron.log 2>&1
или с помощью PATH env при запуске сценария cron:
PATH=/usr/sbin:/usr/bin:/sbin:/bin
*/2 * * * * root logrotate /etc/logrotate.d/rotate_tomcat >> /var/log/myCron.log 2>&1
Это хорошо попрактикуйтесь в протоколировании вывода команд cron, как указано выше.