问题描述
我想验证我的cron作业正在执行以及在什么时间执行。我相信我的sudo crontab -e
工作有一个日志,但在哪里?
我搜索谷歌,并找到建议,看看/var/log
(其中我没有看到任何与名称’cron’),并编辑文件/etc/syslog.conf
,我也没有。
最佳解决思路
在默认安装上,cron作业被记录到
/var/log/syslog
您可以通过运行在该日志文件中看到只是cron作业
grep CRON /var/log/syslog
如果你还没有重新配置任何东西,这些条目将在那里。
次佳解决思路
您可以创建一个cron.log文件来仅包含syslog中显示的CRON条目。请注意,如果您遵循以下指示,CRON作业仍将显示在系统日志中。
打开文件
/etc/rsyslog.d/50-default.conf
找到以下行开头的行:
#cron.*
取消注释该行,保存文件并重新启动rsyslog:
sudo service rsyslog restart
您现在应该在这里看到一个cron日志文件:
/var/log/cron.log
现在将Cron活动记录到此文件(除syslog外)。
请注意,在cron.log中,您将看到cron在/etc/cron.hourly,cron.daily等运行脚本时的条目 – 例如,就像是:
Apr 12 14:17:01 cd CRON[14368]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
但是,除非这些脚本将输出指向cron.log(或者可能指向其他某个日志文件),否则您将不会看到关于哪些脚本实际在/etc/cron.daily或/etc/cron.hourly内运行的更多信息。
如果您想验证crontab是否正在运行,而无需在cron.log或syslog中搜索它,请创建一个将输出重定向到您选择的日志文件的crontab,如下所示:
01 14 * * * /home/joe/myscript >> /home/log/myscript.log 2>&1
这会将所有运行的脚本可能产生的标准输出和错误重定向到指定的日志文件。
第三种解决思路
在这种情况下,有时可以持续监视它:
tail -f /var/log/syslog | grep CRON
第四种思路
您还可以将各个cronjob的输出引导到自己的日志中以获得更好的可读性,您只需要在某处追加日期输出即可。
0 15 * * * /home/andrew/daily-backup.sh >> /var/log/daily-backup.log 2>&1
第五种思路
这是一个非常古老的问题,但这些答案都不令人满意。
首先让你的cron作业每分钟运行一次,然后用测试日志记录运行cron作为non-daemon(暂时只杀掉任何可能已经启动的crond):
crond -nx test
并查看流经终端的程序执行日志。