在我的小型 Debian squeeze 网络服务器上,我安装了 syslog-ng(不是syslogd,例如这个问题)。一般来说,我的日志很安静,
-- MARK --
行。/var/log/syslog
然而,我的却充斥着这些
Sep 23 23:09:01 bookchin /USR/SBIN/CRON[24885]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -delete > /dev/null)
Sep 23 23:09:01 bookchin /USR/SBIN/CRON[24886]: (root) CMD ( [ -d /var/lib/php4 ] && find /var/lib/php4/ -type f -cmin +$(/usr/lib/php4/maxlifetime) -print0 | xargs -r -0 rm > /dev/null)
Sep 23 23:17:01 bookchin /USR/SBIN/CRON[24910]: (root) CMD ( cd / && run-parts /etc/cron.hourly)
这是一种垃圾。有什么干净的方法可以避免这种情况(再次使用 syslog-ng)?
答案1
对于 syslog-ng 来说,它与常规 syslog 略有不同:您需要将 cron 添加到与 关联的过滤器中/var/log/syslog
。在 中/etc/syslog-ng/syslog-ng.conf
,将其替换为:
filter f_syslog3 { not facility(auth, authpriv, mail) and not filter(f_debug); };
和:
filter f_syslog3 { not facility(cron, auth, authpriv, mail) and not filter(f_debug); };
您就完成了。
答案2
另一个选择是阻止 cron 记录除错误之外的任何内容:
改变/etc/default/cron
:
# Or, to log standard messages, plus jobs with exit status != 0:
# EXTRA_OPTS='-L 5'
#
# For quick reference, the currently available log levels are:
# 0 no logging (errors are logged regardless)
# 1 log start of jobs
# 2 log end of jobs
# 4 log jobs with exit status != 0
# 8 log the process identifier of child process (in all logs)
#
EXTRA_OPTS="-L 0"
默认情况下 EXTRA_OPTS 行是“”
附录:
有人错误地编辑了这个答案,使其看起来好像会阻止 cron“完全”记录。这是不正确的。请注意我发布的文本中-L 0
的描述:0
# 0 no logging (errors are logged regardless)
或者直接使用 4:
# 4 log jobs with exit status != 0
OP 希望避免在启动 cron 作业时每分钟都记录日志消息。仅记录错误或错误和非零退出状态是一个不错的选择。