我尝试按如下方式安排我的第一个 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>