【问题标题】:set up logrotate for a Rails app为 Rails 应用程序设置 logrotate
【发布时间】:2013-02-12 15:47:47
【问题描述】:

几天来,我一直在网上搜索如何设置我的服务器以自动轮换我的团队最近发布的 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 不像我想的那样有效?

【问题讨论】:

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


    【解决方案1】:

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

    使用您的 cron 命令,/etc/cron.daily/* 只会在计算机在午夜 (00:15) 开启时运行。如果你像某些人那样在晚上关闭它,它就永远不会运行。

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

    当然,您不想同时使用两者,因为那样会每天运行两次作业。因此,最脆弱的机制 cron 将通过仅在未安装 anacron 的情况下运行作业来屈服于 anacron。

    这是 Debian 和 Ubuntu 默认使用 test -x /usr/sbin/anacron || crontab 作业前缀所做的事情。

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

    【讨论】:

    • 感谢您的解释!我真正头疼的是为什么这些原木似乎都没有被旋转过。在过去的几天里,我可能因为试图强制轮换而把自己搞砸了。我不知道服务器是否需要超过 24 小时才能认为日志需要轮换,但是使用包含您的 test -x /usr/sbin/anacron || 命令的 crontab,几天前日志没有轮换。我会让她坐几天不碰任何东西,看看它是否有效......
    【解决方案2】:

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

    它对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-04
      • 2015-05-19
      相关资源
      最近更新 更多