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

我有一个脚本,需要每分钟执行一次。 问题是每次执行cron都会logging到/ var / log / syslog。 我最终在/ var / log / syslog-

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

顺便说一句,我使用的是debian

我的问题是 – 有没有办法告诉cron不要每次都把这些信息写入syslog?

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

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

记得在/etc/logrotate.d/syslogjoin/var/log/cron以确保它被旋转,例如

 # /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 } 

好,

我的问题的解决scheme是:

更改

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

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

/etc/syslog.conf ,然后重启syslog

我也有cron被发送到/var/log/cron.log由Dave Cheneybuild议,并卡住了一个logrotate。 我与Daves的build议修复是最适合我的情况,因为:

  1. 它使/var/log/syslog不会被cron消息混乱
  2. 我仍然得到cron消息(这是很好的故障排除)
  3. logrotate保持/var/log/cron.log过大。

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

我用不同的方式解决了这个问题,但是我的目标稍有不同。 我想放弃atrun发射时生成的cron日志条目,这样我的硬盘就可以睡眠,不会每5分钟就被唤醒一次。

你可以把syslog.conf中的一个日志事件的目标作为一个shell命令,前面加上了pipe道,所以我用grep把我不想要的那个扔掉了。 所以:

 cron.* | grep -v "(/usr/libexec/atrun)" >> /var/log/cron.log 

我还没有调查,但我相信应该可以将这些日志条目发送到另一个目标,如果他们仍然想要。

实际上,“最好的”(可以声称的)解决scheme是@DaveCheney build议和user7321 最终做了什么的组合,再加上我build议的第三个操作:

  1. 防止syslogd将与cron相关的日志消息附加到/ var / log / syslog
  2. 确保cron日志消息确实被logging在某处(特别是在/ var / log / cron中)+确保cron日志的日志轮转。
  3. 防止syslogd将cron相关的日志消息附加到/ var / log / messages

在你的/etc/syslog.conf ,这些build议的组合改变如下:

 *.*;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。

在Ubuntu 14.04.5(可能在其他地方),有rsyslogd而不是syslogd。 TranslucentCloud用Debian Jessie暗示了这一点,但同样的解决scheme(但是改变rsyslog.conf而不是syslogd.conf)在Ubuntu中似乎不起作用。

看起来在/etc/rsyslog.d/50-default.conf中设置的值实际上优先于在/etc/rsyslog.conf中设置的值,所以最好在那里进行更改,然后重新启动rsyslog和cron。 否则,你仍然会以cron日志logging到syslog的默认行为, 以及 cron日志logging到cronlog(但不是唯一的)。

在我的/etc/rsyslog.d/50-default.conf中的前几行:

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

瞧!