我想验证我的 cron 作业是否正在执行以及何时执行。我相信我的sudo crontab -e
工作有日志,但在哪里?
我搜索了谷歌并找到了要查看的建议/var/log
(在其中我没有看到名称中带有“cron”的任何内容)并编辑/etc/syslog.conf
我也没有的文件。
Ric*_*way 1156
在默认安装中,cron 作业被记录到
/var/log/syslog
Run Code Online (Sandbox Code Playgroud)
您可以通过运行在该日志文件中仅查看 cron 作业
grep CRON /var/log/syslog
Run Code Online (Sandbox Code Playgroud)
如果您没有重新配置任何东西,条目将在那里。
use*_*345 312
您可以创建一个 cron.log 文件以仅包含显示在 syslog 中的 CRON 条目。请注意,如果您按照以下说明操作,CRON 作业仍将显示在系统日志中。
打开文件
/etc/rsyslog.d/50-default.conf
Run Code Online (Sandbox Code Playgroud)
找到以以下内容开头的行:
#cron.*
Run Code Online (Sandbox Code Playgroud)
取消注释该行,保存文件,然后重新启动 rsyslog:
sudo service rsyslog restart
Run Code Online (Sandbox Code Playgroud)
您现在应该在这里看到一个 cron 日志文件:
/var/log/cron.log
Run Code Online (Sandbox Code Playgroud)
Cron 活动现在将记录到此文件(除了 syslog)。
请注意,在 cron.log 中,您将在 /etc/cron.hourly、cron.daily 等中看到 cron 何时运行脚本的条目 - 例如:
Apr 12 14:17:01 cd CRON[14368]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Run Code Online (Sandbox Code Playgroud)
但是,您不会看到更多有关在 /etc/cron.daily 或 /etc/cron.hourly 中实际运行哪些脚本的信息,除非这些脚本将输出直接输出到 cron.log(或可能输出到其他一些日志文件)。
如果您想验证 crontab 是否正在运行而不必在 cron.log 或 syslog 中搜索它,请创建一个将输出重定向到您选择的日志文件的 crontab - 类似于:
01 14 * * * /home/joe/myscript >> /home/log/myscript.log 2>&1
Run Code Online (Sandbox Code Playgroud)
这会将运行的脚本可能产生的所有标准输出和错误重定向到指定的日志文件。
小智 112
在这种情况下,有时持续监控它会很有用:
tail -f /var/log/syslog | grep CRON
Run Code Online (Sandbox Code Playgroud)
And*_*yer 62
您还可以将各个 cronjobs 的输出定向到他们自己的日志以获得更好的可读性,您只需要在某处附加日期的输出。
0 15 * * * /home/andrew/daily-backup.sh >> /var/log/daily-backup.log 2>&1
Run Code Online (Sandbox Code Playgroud)
小智 37
如果您systemd
的系统上已安装,则可以使用该journalctl
命令显示 cron 作业日志。
例如,在我的 Ubuntu 17.10 上:
journalctl -u cron.service
Run Code Online (Sandbox Code Playgroud)
Har*_*rel 20
journalctl -t CROND
Run Code Online (Sandbox Code Playgroud)
从journalctl
手册:
-t, --identifier=SYSLOG_IDENTIFIER|PATTERN
Show messages for the specified syslog identifier SYSLOG_IDENTIFIER,
or for any of the messages with a "SYSLOG_IDENTIFIER" matched by PATTERN.
This parameter can be specified multiple times.
Run Code Online (Sandbox Code Playgroud)
小智 15
这是一个非常古老的问题,但这些答案似乎都不令人满意。
首先让您的 cron 作业每分钟运行一次,然后使用测试日志将 cron 作为非守护进程运行(暂时,只需杀死任何可能已经启动的 crond):
crond -nx test
并查看流经终端的程序执行日志。
SDs*_*lar 12
它是/var/log/syslog
默认的。
但是可以设置创建一个单独的cron.log,比较有用。
此问答描述了该过程:
在这个答案中还有创建一个wcron
命令的说明,该命令显示它是近乎实时的。另外,它链接到另一个答案,
这显示了如何更改日志级别以不仅包括作业的开始 - 级别 15 还将显示错误和结束时间。
zer*_*ero 10
如前所述,cron 作业被记录到 /var/log/syslog
您可以通过管道将系统日志传递给 grep 并过滤掉 CRON 日志,如下所示
less /var/log/syslog | grep CRON
Run Code Online (Sandbox Code Playgroud)
您可以像这样搜索 crontab 日志
less /var/log/syslog | grep CRON | grep <search-keyword-comes-here>
Run Code Online (Sandbox Code Playgroud)
您可以搜索存储在 gz 文件中的 crontab 历史日志,如下所示
less /var/log/syslog.2.gz | grep CRON | grep <search-keyword-comes-here>
Run Code Online (Sandbox Code Playgroud)
拥有日志记录机制总是被认为是好的,您可以为您的服务器快速设置ELK,您还可以尝试使用logz。
小智 9
您可以将 的输出重定向cron
到临时文件。如:
00 11 07 * * /bin/bash /home/ubuntu/command.sh > /tmp/output 2>&1
Run Code Online (Sandbox Code Playgroud)
错误和正常输出,都将重定向到同一个文件
小智 7
这显示了我使用 Centos 7 的 CRON 运行时
cat /var/log/cron
Run Code Online (Sandbox Code Playgroud)
在 Ubuntu 20.04 上,/var/mail/{user}
有我正在寻找的 cron 消息。
我找不到合适的 cron 日志/var/log/messages
。