如何防止 cron 填满我的系统日志?

use*_*321 40 debian syslog cron

我有一个需要每分钟执行一次的脚本。问题是 cron/var/log/syslog每次执行时都会记录。我最终看到这样的事情一遍又一遍地重复/var/log/syslog

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

我正在使用 Debian。

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

Dav*_*ney 27

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

# Log cron stuff
cron.*                                                  /var/log/cron
Run Code Online (Sandbox Code Playgroud)

记得添加/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
}
Run Code Online (Sandbox Code Playgroud)

  • 哦,伙计,我是史诗般的失败。我正在编辑 syslog.conf 并重新启动 cron !!难怪它不起作用..我应该重新启动系统日志 =) (2认同)
  • 启用 cron.log 不会阻止将 cron 消息写入 syslog。 (2认同)

use*_*321 17

好的,

我的问题的解决方案是:

改变

*.*;auth,authpriv.none     -/var/log/syslog
Run Code Online (Sandbox Code Playgroud)

*.*;cron,auth,authpriv.none     -/var/log/syslog
Run Code Online (Sandbox Code Playgroud)

/etc/syslog.conf然后重新启动系统日志

我也/var/log/cron.log按照 Dave Cheney 的建议将 cron 发送给了它,并在其上进行了 logrotate。我对 Daves 建议的修复最适合我的情况,因为:

  1. /var/log/syslog不会被 cron 消息弄得乱七八糟
  2. 我仍然收到 cron 消息(这对故障排除很有帮助)
  3. logrotate/var/log/cron.log不会变得太大。

  • 对于那些关心现代系统的人来说,Debian 8.0 Jessie 中有一个 `rsyslog`,因此需要编辑的是 `/etc/rsyslog.conf`。顺便说一下,默认情况下,要添加的字符串已经存在,您只需取消注释即可(第 63 行)。并且`/var/log/cron.log` 已经在`/etc/logrotate.d/syslog` 中,就像包维护者已经阅读过这个线程一样。 (10认同)
  • @TranslucentCloud 只是想补充一下,我在 ubuntu 14 LTS 上的 rsyslog 配置位于 /etc/rsyslog.d/50-default.conf 中。 (2认同)

dfc*_*dfc 15

更改 /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"
Run Code Online (Sandbox Code Playgroud)

默认情况下 EXTRA_OPTS 行是“”

  • 此 IMO 是正确的解决方案:不生成日志记录。 (2认同)

小智 5

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

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

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

*.*;cron,auth,authpriv.none     -/var/log/syslog
cron.*                          /var/log/cron.log
Run Code Online (Sandbox Code Playgroud)

瞧!