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

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

具体来说,我试图在 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 服务器上都很重要,但这不是主要的 Web 服务器,甚至不允许从公司外部进行连接)。

答案1

任何最新的 syslog 守护进程(如 syslog-ng 或 rsyslog)都支持过滤功能。只需编辑rsyslog.conf或忽略包含字符串的syslog-ng-conf进程名称条目即可。/USR/SBIN/CRONCMD

甚至更好:您只需将这些消息记录到另一个文件中(例如cron-detail.log)。

文档链接:

答案2

...或者你也可以偷懒并通过管道传输日志grep -v FILTERSTRING;)

答案3

如果我浏览日志文件以确保我的每日备份脚本等已执行,它们就会被所有这些条目吞没。

嗯,像 cron.log 这样的系统日志实际上并不需要定期翻阅。如果作业无法运行,或者在 stderr 上产生输出,您无论如何都会收到邮件。

如果您希望在 cron 作业运行后收到积极通知,请让重要作业写入单独的日志文件,例如 important.log。然后,您将获得一个包含您喜欢的格式的日志文件,其中包含您感兴趣的信息。

相关内容