cron 错误记录在哪里?

cron 错误记录在哪里?

如果我cron错误地设置作业,它们似乎会默默地失败。我应该在哪里查找错误日志以了解出了什么问题?

答案1

正如其他人指出的那样,cron将通过电子邮件将其运行的任何程序的输出发送给您(如果有任何输出)。因此,如果没有得到任何输出,基本上有三种可能性:

  1. crond甚至无法启动 shell 来运行程序或发送电子邮件
  2. crond邮寄输出时遇到问题,或者邮件丢失。
  3. 程序没有产生任何输出(包括错误消息)

情况 1. 不太可能,但应该在 cron 日志中写入一些内容。 Cron 有一个自己保留的系统日志工具,因此您应该查看/etc/syslog.conf(或发行版中的等效文件)以查看工具消息cron发送到的位置。热门目的地包括/var/log/cron/var/log/messages/var/log/syslog

在情况 2 中,您应该检查邮件程序守护程序日志:来自 Cron 守护程序的消息通常显示为 from root@yourhost。您可以使用MAILTO=...crontab 文件中的一行让 cron 向特定地址发送电子邮件,这样可以更轻松地 grep 邮件程序守护程序日志。例如:

[email protected]
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

答案2

您始终可以显式地将作业输出发送到日志文件:

0 8 * * * /usr/local/bin/myjob > /var/log/myjob.log 2>&1

请记住,这将取代之前提到的邮件行为,因为 crond 本身不会收到作业的任何输出。如果你想保持这种行为,你应该看看 tee(1)。

答案3

如果您没有看到邮件,则可能是在向 root@yourcompany 发送垃圾邮件,其中包含错误,这对于使用该帐户进行监控的人员来说可能非常烦人。尝试将输出发送到 Syslog:

*/5 * * * * yourcronjob 2>&1 | /usr/bin/logger -t yourtag

然后,等待 cronjob 运行并在 /var/log/messages(或某些系统上的 /var/log/user.log)中查找错误。

这对于只有 1-2 行长的错误消息非常有效,例如“yourcronjob:找不到命令”。它还利用您现有的系统日志基础设施(Logrotation、中央系统日志记录、Splunk 等)。它还可以减少垃圾邮件的根源。

如果您的 cronjob 生成数百行输出,这可能不是一个好的解决方案。

答案4

默认的 cron 配置将向您发送一封包含程序输出的邮件。如果失败,您可以尝试将失败的程序包装在 shell 脚本中,以确保程序不会失败,并且您可以进一步记录输出。

这是某些 cron 实现上的可配置设置。

相关内容