我怎样才能防止 cron 填满我的系统日志?

我怎样才能防止 cron 填满我的系统日志?

我有一个需要每分钟执行一次的脚本。问题是/var/log/syslog每次执行时,cron 都会记录日志。我最终看到类似这样的内容在 中反复出现/var/log/syslog

Jun 25 00:56:01 myhostname /USR/SBIN/CRON[1144]: (root) CMD (php /path/to/script.php > /dev/null)

我正在使用 Debian。

我的问题是:有什么方法可以告诉 cron 不要每次都将这些信息写入 syslog?

答案1

您可以将 cron 的输出发送到单独的日志设备,并将以下内容添加到您的/etc/syslog.conf文件中:

# Log cron stuff
cron.*                                                  /var/log/cron

记得添加/var/log/cron到您的/etc/logrotate.d/syslog以确保它被旋转,例如

# /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
    sharedscripts
    postrotate
    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

答案2

好的,

我的问题的答案是:

改变

*.*;auth,authpriv.none     -/var/log/syslog

*.*;cron,auth,authpriv.none     -/var/log/syslog

然后/etc/syslog.conf重新启动 syslog

我还按照 Dave Cheney 的建议发送了 cron/var/log/cron.log并在其上设置了 logrotate。我使用 Daves 建议的修复方法最适合我的情况,因为:

  1. 它避免/var/log/syslog了 cron 消息的混乱
  2. 我仍然会收到 cron 消息(这对于故障排除很有用)
  3. logrotate 不会/var/log/cron.log变得太大。

答案3

更改 /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 行是“”

答案4

实际上,“最佳”解决方案(人们可以声称)是@DaveCheney 的组合建议以及 user7321最终,另外我建议采取第三项行动:

  1. 防止 syslogd 将与 cron 相关的日志消息附加到 /var/log/syslog
  2. 确保 cron 日志消息确实记录在某处(具体来说,在 /var/log/cron 中)+ 确保 cron 日志的日志轮换。
  3. 防止 syslogd 将与 cron 相关的日志消息附加到 /var/log/messages

在您的 中/etc/syslog.conf,这些建议的组合发生了如下变化:

*.*;cron,auth,authpriv.none                         -/var/log/syslog
auth,authpriv.none;daemon.none;mail,news.none       -/var/log/messages

进入:

cron.*                                              /var/log/cron.log
*.*;cron,auth,authpriv.none                         -/var/log/syslog
auth,authpriv.none;cron,daemon.none;mail,news.none  -/var/log/messages

并且不要忘记强制重新加载(或重新启动) cron 和 syslogd 服务,例如使用:

/etc/init.d/syslogd force-reload
/etc/init.d/cron force-reload

注意:这也适用于 rsyslogd。

相关内容