我创建了一个program.conf,它在EC2实例中每小时对日志进行一次日志旋转。当我强制执行命令时,logrotate效果很好(通过 sudo logrotate program.conf --verbose --force ),但它并非每小时都运行。
我通过搜索这个问题来尝试了几种解决方案,例如将program.conf放在/etc/logrotate.d中,并将logrotate从cron.dail移到cron.hourly。 但这不起作用。
这是我的program.conf:
/home/user_i/*.log{
hourly
missingok
dateext
rotate 1
compress
size 100M
sharedscripts
postrotate
/usr/bin/bash file.sh
endscript
}
请问您有什么主意吗?
谢谢
答案 0 :(得分:0)
您将需要在crontab中添加作业
crontab -e
然后添加一个作业,该作业每隔14分钟每小时运行一次,
14 * * * * /usr/sbin/logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state
还要另外检查crontab是否确实在运行
service crontab status
如果它停止了,您可以这样做
service crontab start
答案 1 :(得分:0)
OP在评论中指出,他们不能使用crontab,需要使用/etc/cron.hourly的解决方案。
获取用于定义logrotate参数的“ program.conf”文件,并将该文件放置在root用户可以访问的位置,但将其放在/etc/logrotate.d中的 NOT / 目录。这个想法是,如果我们以自己的方式每小时运行一次,我们不希望logrotate在每天正常运行时也也执行该旋转。该文件仅需要root用户可读,而不是可执行文件。
您需要确保所需的logrotate参数的 ALL 位于此文件中。我们将使用logrotate仅使用此配置文件来执行旋转,但这也意味着不会考虑您在/etc/logrotate.conf中定义的任何“全局”参数。如果您有任何自定义旋转需要遵守的参数,则需要将它们复制到“ program.conf”文件中。
在您的/etc/cron.hourly文件夹中,创建一个新文件(可由root执行),该文件将作为每小时执行我们自定义旋转的脚本(相应地调整您的shell / shebang):
#!/ usr / bin / bash
logrotate -f /some/dir/program.conf
这将使cron每小时强制启动该配置文件的旋转,而不会影响logrotate的正常功能。