有没有办法从Linux日志文件中排除特定条目?

具体来说,我试图在Ubuntu服务器(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%。 如果我正在浏览日志文件,以确保我的日常备份脚本等被执行,他们会被所有这些条目吞下。

有没有办法让我排除这个过程被logging?

我意识到我可以使用grep或日志读取器程序来search,但这不是我正在寻找的东西。 我只想能够“cat cron.log | less”,并且不需要logging垃圾邮件,而不需要logging垃圾邮件,而且我也不知道这个过程对大多数web服务器来说都是非常重要的,主要是一个networking服务器,甚至不允许来自公司外部的连接)。

任何最近的syslog-daemon(如syslog-ng或rsyslog)都支持过滤function。 只要编辑你的rsyslog.confsyslog-ng-conf ,忽略包含stringCMD的进程名称/USR/SBIN/CRON条目。

更好的是:你只需将这些消息logging到另一个文件(例如cron-detail.log )。

文档链接:

  • rsyslog.conf:过滤条件
  • syslog-ng:filter

…或者你可以只是懒惰,并通过grep -v FILTERSTRINGpipe道日志;)

如果我正在浏览日志文件,以确保我的日常备份脚本等被执行,他们会被所有这些条目吞下。

那么,像cron.log这样的系统日志并不是定期的翻阅。 如果一个作业不能运行,或者在stderr上产生输出,你仍然会收到邮件。

如果你想要正确的通知你的cron作业已经运行,让重要的作业写一个单独的日志文件,比如important.log。 然后你会得到一个有你感兴趣的信息的日志文件。