我有一个脚本,需要每分钟执行一次。问题是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)
我正在使用Debian。
我的问题是:有什么办法可以告诉cron每次都不要将此信息写入syslog?
我有一个脚本,需要每分钟执行一次。问题是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)
我正在使用Debian。
我的问题是:有什么办法可以告诉cron每次都不要将此信息写入syslog?
Answers:
您可以将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
}
好,
我的问题的解决方案是:
更改
*.*;auth,authpriv.none -/var/log/syslog
至
*.*;cron,auth,authpriv.none -/var/log/syslog
内/etc/syslog.conf
,然后重新启动系统日志
我还/var/log/cron.log
按照Dave Cheney的建议将cron发送给了我,并在上面贴了logrotate。我对Daves建议的解决方案最适合我的情况,因为:
/var/log/syslog
避免被cron消息所困扰/var/log/cron.log
不会太大。rsyslog
Debian 8.0 Jessie中有一个,因此需要对其/etc/rsyslog.conf
进行编辑。顺便说一下,默认情况下要添加的字符串已经存在,您只需要取消注释即可(第63行)。并且/var/log/cron.log
已经在中/etc/logrotate.d/syslog
,就像程序包维护人员已阅读此线程一样。
Is there any way I can tell cron not write this information to syslog every time
。这不是答案。
更改/ 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行为“”
在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
瞧!
实际上,“最佳”解决方案(可以声称)是@DaveCheney 建议和user7321 最终完成的操作的结合,再加上我建议的第三项操作:
在您的中/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。