2011-01-27 96 views
133

我想知道我是如何看到cron作业在每次执行时所做的。日志文件位于何处?或者我可以将输出发送到我的电子邮件吗?我已经设置了电子邮件地址以在cron作业运行时发送日志,但我还没有收到任何内容。Cron作业日志 - 如何登录?

回答

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

将记录从cron作业全部输出到/var/log/myjob.log

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

+51

描述是什么意思`2>&1`:http://stackoverflow.com/questions/818255/in-the-bash-shell-what-is-21 – Yamaneko 2012-09-26 14:26:30

+4

如果从未创建该日志文件,可能会出现什么问题? – clamp 2013-12-20 10:57:28

+9

FWIW,如果你想在日志中使用`stderr`和`stdout`,`2>&1`必须在间接后面出现:`myjob.sh >> /var/log/myjob.log 2>&1` – 2014-04-23 17:08:01

8

这里是我的代码:

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

有至少有三个不同类型的日志记录:

  1. 程序之前使用日志记录被执行时,其仅当 的cronjob试图执行该命令日志。那个位于 /var/log/syslog,正如@Matthew Lock所述。

  2. 程序试图执行后发生的错误记录,可以通过电子邮件或文件发送到 ,如@Spliffster所述。我喜欢记录 到一个文件中,因为使用电子邮件,那么你有 问题的新来源,其是否电子邮件发送和接收工作完美 检查。有时候是,有时候不是。例如,在一个 简单的普通台式机中,你有没有兴趣 配置SMTP,有时你会更喜欢记录到文件:

    * * * * COMMAND_ABSOLUTE_PATH > /ABSOLUTE_PATH_TO_LOG 2>&1 
    
    • 我也会考虑检查/ ABSOLUTE_PATH_TO_LOG权限,并从该用户的权限运行该命令。只是为了验证,而您测试它是否可能是问题的潜在来源。
  3. 程序本身的日志记录,以自身的错误处理和日志记录进行跟踪。

cronjobs存在一些常见的问题来源: *要执行的二进制文件的ABSOLUTE PATH。当您从 shell中运行它,它可能工作,但cron进程似乎使用另一个 环境,因此它并不总能找到二进制文件,如果你不 使用绝对路径。 *二进制文件使用的库。它或多或少与前一点相同,但要确保如果简单地放置命令的名称,就是指使用相同库的二进制文件,或者更好地检查是否使用绝对路径引用二进制文件与您直接使用控制台时所提到的完全相同。二进制文件可以使用定位命令中找到,例如:

$locate python 

确保二进制你参考,是非常相同你调用你的shell,或者干脆在你的shell使用再次测试二进制你打算放在cronjob中的绝对路径。

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

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

1

在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 

保存并关闭文件,然后重新启动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) 

但是,你不会看到什么脚本实际上里面/etc/cron.daily/etc/cron.hourly运行更多的信息,除非这些脚本直接输出到cron.log(或者是一些其他的日志文件)。

如果您想验证一个crontab中运行,而不必寻找它在cron.logsyslog,创建一个重定向输出到您选择的日志文件的crontab - 喜欢的事:

# For more information see the manual pages of crontab(5) and cron(8) 
# 
# m h 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/

0

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

0

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

您可以在crontab文件中使用MAILTO=recipient将电子邮件发送到其他帐户。

为此,您需要让邮件正常工作。发送到本地邮箱通常不是问题(事实上,有可能ls -l "$MAIL"会显示你已经收到了一些邮件),但是将它从盒子中取出并发布到互联网上需要MTA(Postfix,Sendmail,你有什么)以正确配置连接到世界。