cron 作业打印到 /dev/stdout

cron 作业打印到 /dev/stdout

我想设置一个将输出打印到 /dev/stdout 的作业,但 cron 正在拦截它,并发送一封电子邮件

crontab -l
*/1 * * * * echo "hiccup" >> /dev/stdout 2>&1

这是消息:

21   │ From [email protected]  Tue May 21 11:13:00 2019
22   │ Return-Path: <[email protected]>
23   │ X-Original-To: xxx
24   │ Delivered-To: [email protected]
25   │ Received: by ltus423288.na.yyy.com (Postfix, from userid 501)
26   │     id EE6752E98EF; Tue, 21 May 2019 11:13:00 +0200 (CEST)
27   │ From: [email protected] (Cron Daemon)
28   │ To: [email protected]
29   │ Subject: Cron <xxx@ltus423288> echo "hiccup" >> /dev/stdout 2>&1
30   │ X-Cron-Env: <SHELL=/bin/sh>
31   │ X-Cron-Env: <PATH=/usr/bin:/bin>
32   │ X-Cron-Env: <LOGNAME=xxx>
33   │ X-Cron-Env: <USER=xxx>
34   │ X-Cron-Env: <HOME=/Users/xxx>
35   │ Message-Id: <[email protected]>
36   │ Date: Tue, 21 May 2019 11:13:00 +0200 (CEST)
37   │ Status: O
38   │
39   │ hiccup

我已经配置了 fluidd,它可以从 stdout 获取所有内容,所以我更喜欢 cron 在那里发送作业日志。我尝试写入到 /dev/stdout 的符号链接的文件,但它不起作用。我不确定,如果我禁用发送邮件,并命令 cron 写入 /var/log/syslog (并使其成为 /dev/stdout 的符号链接),cron 将陷入无限循环。

答案1

cron 的目的是在没有终端的情况下运行命令。这意味着没有终端可以输出标准输出。这就是它被邮寄的原因。

您可以丢弃它的输出:

*/1 * * * * echo "hiccup" >> /dev/null 2>&1

您可以将作业的标准输出通过管道传输到程序,例如logger将其发送到系统日志守护进程:

*/1 * * * * echo "hiccup" | logger -t mycronjob 2>&1

或者将其重定向到文件:

*/1 * * * * echo "hiccup" >> /var/tmp/some_file 2>&1

但有简单的没有终端cron 作业可以将其标准输出发送到...

答案2

cron“无头”工作,所以/dev/stdout(以及任何你echo认为没有意义的事情)。这就是它捕获消息并发送邮件的原因。

但是,您仍然可以指示它写入任何常规文件以供其他软件使用。你可以这样做输出重定向(启动命令之后> somefile>> somefile之后),如接受的答案的示例所示:

*/1 * * * * echo "hiccup" >> /var/tmp/some_file 2>&1

相关内容