Cron 作业没有输出

Cron 作业没有输出

我尝试按如下方式安排我的第一个 cron 作业:

crontab -e

该文件的顶部有一些注释,在这些注释之后的第一行,我添加了

* * * * * date

我预计每分钟都会打印出日期和时间,但终端上没有任何反应。输出是否发送到其他地方,或者 cron 作业没有运行?有什么技巧可以让这项工作成功吗?

答案1

从 cron 手册页:

执行命令时,任何输出都会邮寄给 crontab 的所有者(或者发送给 crontab 中 MAILTO 环境变量中指定的用户,如果存在的话)。运行这些进程的 cron 子副本的名称强制为大写,如 syslog 和 ps 输出中所示。

因此,如果您已使用系统或系统日志(例如/var/log/syslog)进行设置,我会检查您的电子邮件。

编辑来自服务器故障(编辑以匹配您的命令)

以下命令将任何 Cron 输出发送到 /usr/bin/logger (包括 stderr,使用 2>&1 转换为 stdout),该输出将发送到 syslog,并带有 date_logging 的“标签”。 Syslog 从那里处理它。由于大多数系统已经具有内置的日志轮换机制,因此我不需要担心像 /var/log/mycustom.log 这样的日志会填满磁盘。

* * * * * root    /bin/date 2>&1 | /usr/bin/logger -t date_logging

答案2

OP,在我的 crontab 的顶部,就在任何作业之前,我有这些注释来提醒我 cron 格式,后面是 MAILTO 变量设置。作为良好实践,所有 cron 变量都应在任何 cron 作业定义之前设置。

# min  hrs  dayofmonth  month  dayofweek  command
# dow = 0-6 where 0 is Sunday, 6=Saturday
MAILTO=chuck

所以就我而言,chuck是运行 cron 的机器本地的用户。如果您设置了完整的邮件传输代理,则可以将 MAILTO 设置为完整的电子邮件地址:

[email protected]

所有 cron 输出都通过 MAILTO 变量发送给用户。

请小心,因为我收到了来自 cron 的“空白”电子邮件,这些电子邮件并不是真正的空白。它捕获了一个回车输出到 STDOUT!这是一个需要追踪的 PITA,因为我找不到让我的 Ubuntu 邮件阅读器(alpine)显示隐藏字符的方法。 (拥有一个显示隐藏ctrs的邮件阅读器是个好主意。)

作为测试作业批处理/shell 文件的替代方法,您可以使用at. Enterat TIMESPEC后跟每行一个命令,然后在命令列表末尾添加 ^D。然而,这不会让您知道您的 cron 变量是否设置正确,但当作业完成at时您仍然会收到一封电子邮件(发送给运行作业的当前本地用户) 。at

at now + 1 minute<ENTER>
batchfilename1<ENTER>
batchfilename2<ENTER>
^D<ENTER>

相关内容