具体来说,我试图在 Ubuntu Server(hardy LTS)下保持一个干净整洁的 cron.log。除了预先安装的 4 或 5 个 cron 作业之外,我还添加了 4 个自己的作业(使用 cron.d 方法)。现在,自动安装的作业之一是每小时运行的 PHP 会话到期脚本。
当然,它需要执行,但坦率地说,我不在乎它何时执行。它每小时运行一次,并输出一个类似于下面的条目。
Oct 18 02:17:01 cobalt /USR/SBIN/CRON[18160]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Oct 18 02:39:01 cobalt /USR/SBIN/CRON[18233]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -r -0 rm)
由于它每小时执行一次并产生一个相对较长的日志条目,它占我的 cron.log 的 90%。如果我翻阅日志文件以确保我的每日备份脚本等得到执行,它们会被所有这些条目吞没。
我有什么办法可以排除这个过程被记录?
我意识到我可以使用 grep 或日志阅读器程序进行搜索,但这并不是我真正想要的。我希望能够“cat cron.log | less”并在没有来自我不关心的进程的日志垃圾邮件的情况下进行浏览(而且我也意识到这个过程在大多数 Web 服务器上都很重要,但这是'主要不是网络服务器,甚至不允许来自公司外部的连接)。
任何最近的 syslog-daemon(如 syslog-ng 或 rsyslog)都支持过滤功能。只需编辑您的
rsyslog.conf
或syslog-ng-conf
忽略/USR/SBIN/CRON
包含字符串的进程名称的条目CMD
。更好的是:您只需将这些消息记录到另一个文件中(例如
cron-detail.log
)。文档链接:
...或者您可以只是懒惰并通过管道传输日志
grep -v FILTERSTRING
;)好吧,像 cron.log 这样的系统日志并不是真的要定期翻阅。如果一个作业无法运行,或者在 stderr 上产生输出,无论如何你都会收到邮件。
如果您希望收到有关您的 cron 作业已运行的肯定通知,请让重要作业编写一个单独的日志文件,例如 important.log。然后你会得到一个日志文件,其中包含你喜欢的格式的有趣信息。