/var/log/syslog 中不存在 Cron 日志

/var/log/syslog 中不存在 Cron 日志

我有一个带有“printf”的 cron 任务:

#!/bin/bash

# ..........
printf "hello\n"
# ..........

它每 N 小时运行一次。但是,/var/log/syslog我根本看不到任何带有“hello”的日志。为什么呢?

答案1

cron 的设计者假设 cron 用户会适当地引导输出(stdout 和 stderr),因此,任何未重定向到文件或其他进程的输出都可能是一个错误。

他们选择通过 sendmail 将所有虚假(即未重定向)的输出转发给 cron 作业的所有者。

如果你检查 /var/log/syslog,你应该会发现类似这样的条目:

 Jun 26 22:18:01 sys0af3e3 CRON[16529]: (CRON) info (No MTA installed, discarding output)

cron 通常调用的程序是 /usr/sbin/sendmail,但您可以通过运行以下命令来验证您的实现中使用了哪个程序:

 strings /usr/sbin/cron | grep -i '^/.*mail'

如果您要创建 /usr/sbin/sendmail(它应该是可执行的),其内容如下:

 echo "####################" >> /tmp/mail.out 2>&1
 date >> /tmp/mail.out 2>&1
 cat >> /tmp/mail.out 2>&1

然后运行:

 systemctl restart cron  #this must be run as root

每次运行后,您都会发现丢失的输出附加到文件 /tmp/mail.out 中。

完成测试后,请不要忘记删除 /usr/bin/sendmail 并重新启动 cron。

相关内容