为Rails应用程序设置logrotate

时间:2013-02-27 00:08:59

标签: ruby-on-rails linux bash cron logrotate

我一直在网上搜索如何设置服务器以自动轮换我的团队最近发布的Rails应用程序的日志。我已经让自己能够运行sudo logrotate -f /etc/logrotate.conf,但当然,谁想要一直这样做?

应用程序日志的配置文件的内容(我想添加更多,但是当我无法旋转一个文件时看不到需要):

/path/to/app/production.log {
  daily
  missingok
  rotate 7
  compress
  delaycompress
  notifempty
  copytruncate
}

我已验证/etc/logrotate.conf文件包含以下行:

include /etc/logrotate.d

但这是我不太确定去哪里的部分。我发现实际上自动化过程有很多不同的方法,但似乎都没有。为了记录,我已经验证服务器安装了anacron命令,但我不知道如何为我自己的任何进程配置它。此外,root在服务器上还没有crontab(我们没有需要它),我不确定使用它是否比/etc/crontab更好。在/etc/crontab文件中,我添加了:

15 0 * * *   root    cd / && run-parts --report /etc/cron.daily

但我见过其他人使用

15 0 * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

后者是更好的选择吗?为什么?如果是这样,我该如何确保它有效?同样,我不知道如何为手头的任务设置anacron。

最后,以下是/etc/cron.daily/logrotate文件的先前内容:

/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
  /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

经过一些研究后,我用这个替换了(我明白了一点):

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

有人可以向我解释第一个配置在做什么,以及这两个选项中哪一个更好?我不确定为什么我必须强迫这个过程让它运行。也许/etc/crontab不能像我认为的那样起作用?

2 个答案:

答案 0 :(得分:1)

  

后者是更好的选择吗?为什么呢?

使用cron命令,只有在午夜(00:15)计算机处于打开状态时才会运行/etc/cron.daily/*。如果你晚上把它关掉,就像有些人一样,它永远不会运行。

解决这个问题,而当计算机在当天晚些时候启动时运行命令,可以使用anacron。对于服务器而言,这显然不如台式机有用。

当然,您不希望同时使用这两种方法,因为这样可以每天运行两次作业。因此,如果没有安装anacron,cron是最脆弱的机制,只能通过运行作业来产生anacron。

Debian和Ubuntu默认使用test -x /usr/sbin/anacron || crontab作业前缀。

所有服务器发行版都会正确设置logrotate,因此您不应修改crontab,anacrontab或/etc/cron.daily/logrotate。您应该做的唯一事情是将文件添加到/etc/logrotate.d

答案 1 :(得分:1)

尝试将其放在/ etc / crontab文件中: - * / 15 * * * * root test -x / usr / lib / cron / run-crons&& / usr / lib / cron / run-crons> / dev / null 2>& 1

它对我有用。