Cron作业日志 – 如何login?

我想知道我如何能够看到每个执行的cron作业。 日志文件位于哪里? 或者我可以将输出发送到我的电子邮件? 我已经设置了电子邮件地址发送日志时,cron作业运行,但我还没有收到任何东西。

* * * * * myjob.sh >> /var/log/myjob.log 2>&1 

将从cron作业的所有输出logging到/var/log/myjob.log

您可以使用mail发送电子邮件。 大多数系统将通过电子邮件发送未处理的cron作业输出到根或相应的用户。

默认情况下,cron会把日志logging到/ var / log / syslog中,这样你就可以使用下面的命令查看cron相关的条目:

 grep CRON /var/log/syslog 

https://askubuntu.com/questions/56683/where-is-the-cron-crontab-log

这是我的代码:

 * * * * * your_script_fullpath >> your_log_path 2>&1 

至less有三种不同types的日志logging:

  1. 执行程序之前的日志logging,只logging如果cronjob TRIED执行该命令。 那个位于/ var / log / syslog,正如@Matthew Lock所提到的那样。

  2. 程序试图执行的错误logging,可以发送到电子邮件或文件,如@Spliffster所述。 我更喜欢logging到一个文件,因为有电子邮件,那么你有一个新的问题来源,并检查电子邮件发送和接收是否工作正常。 有时候是这样,有时候不是。 例如,在一个简单的普通桌面机器中,你对configurationsmtp不感兴趣,有时你更喜欢logging到一个文件:

      * * * * COMMAND_ABSOLUTE_PATH > /ABSOLUTE_PATH_TO_LOG 2>&1 
    • 我还会考虑检查/ ABSOLUTE_PATH_TO_LOG的权限,并从该用户的权限运行该命令。 只是为了validation,而testing它是否可能是潜在的问题来源。
  3. 程序本身的日志logging,具有自己的error handling和日志logging用于跟踪目的。

cronjobs有一些常见的问题来源:*要执行的二进制文件的ABSOLUTE PATH。 当你从你的shell运行它时,它可能会工作,但cron进程似乎使用另一个环境,因此如果不使用绝对path,它不会总是find二进制文件。 *二进制文件使用的库。 它或多或less与前一点相同,但要确保,如果只是简单地放置命令的名称,就是指使用相同库的二进制文件,或者更好地检查是否使用绝对path是直接使用控制台时所提及的。 二进制文件可以使用locate命令find,例如:

 $locate python 

确保你要引用的二进制文件与你在shell中调用的二进制文件是完全一样的,或者使用你打算放在cronjob中的绝对path在你的shell中再次testing。

  • 另一个常见的问题是cronjob中的语法。 请记住,有些特殊字符可用于列表(逗号),定义范围(破折号),定义范围的增量(斜线)等。请看一下: http : //www.softpanorama.org/Utilities/ cron.shtml

因为你用sudo运行一些命令,它不会允许它。 Sudo需要一个tty。

在Ubuntu上,您可以启用cron.log文件来仅包含CRON条目。

/etc/rsyslog.d/50-default.conf文件中取消注释提及cron的行:

 # Default rules for rsyslog. # # For more information see rsyslog.conf(5) and /etc/rsyslog.conf # # First some standard log files. Log by facility. # auth,authpriv.* /var/log/auth.log *.*;auth,authpriv.none -/var/log/syslog #cron.* /var/log/cron.log 

保存并closures文件,然后重新启动rsyslog服务:

 sudo systemctl restart rsyslog 

您现在可以在自己的文件中看到cron日志条目:

 sudo tail -f /var/log/cron.log 

示例输出:

 Jul 18 07:05:01 machine-host-name CRON[13638]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1) 

但是,除非这些脚本将输出指向cron.log(或者可能指向其他某个日志文件),否则您将不会看到关于哪些脚本实际在/etc/cron.daily/etc/cron.hourly运行的更多信息。

如果要validationcrontab是否正在运行,而不必在cron.logsyslogsearch它,请创build一个将输出redirect到您所选日志文件的crontab,如下所示:

 # For more information see the manual pages of crontab(5) and cron(8) # # mh dom mon dow command 30 2 * * 1 /usr/local/sbin/certbot-auto renew >> /var/log/le-renew.log 2>&1 

采取的步骤: https : //www.cyberciti.biz/faq/howto-create-cron-log-file-to-log-crontab-logs-in-ubuntu-linux/

以上所有都不适合我。 所以,我必须在/etc/cron.d/的crontab文件的顶部添加'MAILTO = [我的电子邮件]',我得到了答案,因为我的cron命令有错误。

cron已经将它通过邮件运行的每个作业的标准输出和标准错误发送给cron作业的所有者。

您可以使用crontab文件中的MAILTO=recipient将电子邮件发送到不同的帐户。

为了这个工作,你需要有邮件正常工作。 发送到本地邮箱通常不是问题(事实上, ls -l "$MAIL"可能会显示你已经收到了一些ls -l "$MAIL" ),但是从盒子里拿出来并上网需要MTA(Postfix, Sendmail,你有什么)正确configuration连接到世界。