如何每小时运行一次logrotate

时间:2019-05-28 07:41:51

标签: amazon-ec2 logrotate

我创建了一个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
}

请问您有什么主意吗?

谢谢

2 个答案:

答案 0 :(得分:0)

您将需要在crontab中添加作业

crontab -e

然后添加一个作业,该作业每隔14分钟每小时运行一次,

14 * * * * /usr/sbin/logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state

来自:https://www.digitalocean.com/community/tutorials/how-to-manage-logfiles-with-logrotate-on-ubuntu-16-04

还要另外检查crontab是否确实在运行

service crontab status

如果它停止了,您可以这样做

service crontab start

答案 1 :(得分:0)

OP在评论中指出,他们不能使用crontab,需要使用/etc/cron.hourly的解决方案。

  1. 获取用于定义logrotate参数的“ program.conf”文件,并将该文件放置在root用户可以访问的位置,但将其放在/etc/logrotate.d中的 NOT / 目录。这个想法是,如果我们以自己的方式每小时运行一次,我们不希望logrotate在每天正常运行时也执行该旋转。该文件仅需要root用户可读,而不是可执行文件。

  2. 您需要确保所需的logrotate参数的 ALL 位于此文件中。我们将使用logrotate仅使用此配置文件来执行旋转,但这也意味着不会考虑您在/etc/logrotate.conf中定义的任何“全局”参数。如果您有任何自定义旋转需要遵守的参数,则需要将它们复制到“ program.conf”文件中。

  3. 在您的/etc/cron.hourly文件夹中,创建一个新文件(可由root执行),该文件将作为每小时执行我们自定义旋转的脚本(相应地调整您的shell / shebang):

    #!/ usr / bin / bash

    logrotate -f /some/dir/program.conf

这将使cron每小时强制启动该配置文件的旋转,而不会影响logrotate的正常功能。