Answers:
正如其他人指出的那样,cron
它将通过电子邮件将其运行的任何程序的输出通过电子邮件发送给您(如果有任何输出)。因此,如果没有任何输出,则基本上有三种可能性:
crond
甚至无法启动外壳来运行程序或发送电子邮件crond
在发送输出邮件时遇到麻烦,或者邮件丢失了。情况1.不太可能,但是应该在cron日志中写一些内容。Cron拥有自己的保留syslog工具,因此您应该查看/etc/syslog.conf
(或发行版中的等效文件)以查看工具消息的cron
发送位置。热门目的地包括/var/log/cron
,/var/log/messages
和/var/log/syslog
。
在情况2中,您应该检查mailer守护程序日志:来自Cron守护程序的消息通常显示为from root@yourhost
。您可以MAILTO=...
在crontab文件中使用一行,以使cron将电子邮件发送到特定地址,这将使grep mailer守护程序日志更加容易。例如:
MAILTO=my.offsite.email@example.org
00 15 * * * echo "Just testing if crond sends email"
在第3种情况下,您可以通过添加另一个可以轻松检查其效果的命令来测试该程序是否实际运行:例如,
00 15 * * * /a/command; touch /tmp/a_command_has_run
因此,您可以crond
通过查看的mtime 来检查是否确实在运行某些程序/tmp/a_command_has_run
。
dead.letter
在根目录或相应用户主目录中称为的文件中找到未送达的邮件。
您始终可以将作业输出显式发送到日志文件:
0 8 * * * /usr/local/bin/myjob > /var/log/myjob.log 2>&1
请记住,这将取代之前提到的邮件行为,因为crond iself不会从作业中收到任何输出。如果要保持这种行为,应查看tee(1)。
>>
代替而不是>
,这样您就不会每次都覆盖日志文件?
| /usr/bin/logger
正如Stefan巧妙建议的那样,即使您愿意,任何类型的I / O重定向都可以。选择你的毒药:tldp.org/LDP/abs/html/io-redirection.html
myjob.log
按预期创建了大小为0的该日志文件,但它已记录到另一个文件,在哪里可以更改此设置?
如果您没有看到邮件,则可能是向root @ yourcompany发送了一些错误消息,这些错误对于使用该帐户进行监视的人员可能非常烦人。尝试将输出发送到Syslog:
*/5 * * * * yourcronjob 2>&1 | /usr/bin/logger -t yourtag
然后,等待cronjob运行并在/ var / log / messages(或某些系统上的/var/log/user.log)中查找错误。
这对于只有1-2行长的错误消息非常有用,例如“ yourcronjob:找不到命令”。它还利用您现有的syslog基础结构(Logrotation,中央syslogging,Splunk等)。它还减少了从根到站的电子邮件垃圾邮件。
如果您的cronjob生成数百行输出,则可能不是一个好的解决方案。
默认的cron配置将向您发送带有程序输出的邮件。如果失败,则可以尝试将失败的程序包装在shell脚本中,以确保该程序不会失败,并且可以进一步记录输出。
在某些cron实现中,这是可配置的设置。
crond
当作业无法运行或作业返回非零退出代码时,您应该收到电子邮件。尝试输入:
$ mailx
在命令提示符下。
mailx(1)
是大多数Unixlike系统上的基本邮件阅读程序。从现代标准来看,它非常原始,但是您可以指望它始终可用。可能还有其他更好的邮件代理,但是它们太多了,您甚至都不知道您恰巧在使用的随机计算机上安装了哪个代理。
请注意,除非您将系统配置为Internet电子邮件服务器,否则该邮件子系统仅在计算机内使用。您可以向计算机上的其他用户发送电子邮件,也可以从计算机上的其他用户接收电子邮件,但是您可能无法将电子邮件发送到外部,并且来自外部世界的电子邮件肯定无法进入您的计算机。
Cron将基本信息记录到/var/log/messages
,但是将任何程序输出邮寄给调用用户。
/var/log/messages
我的Ubuntu服务器(4.4.0-128-generic #154-Ubuntu SMP
)上没有。知道为什么吗?我已经在root
crontab的几个月中定义了一些cron作业(例如apt autoremove
),但似乎没有执行过。
几年前,我偶然遇到了同样的问题,而最近,里卡多(Ricardo)遇到了上述问题的解决方案。正如您提到的那样,很难检测到缺少电子邮件,并且您当然也不想向root @ yourcompany电子邮件发送垃圾邮件。如果有兴趣,请查看deadmanssnitch.com。。该工具似乎可以解决上述情况。使用起来似乎很简单-只需添加该工具为您的cronjob提供的代码。如果您的作业无法在指定的内部运行,则会收到警报。如果您的工作再次开始运行,您还将收到警报。