是否有可用于 cron 作业的扩展日志记录?

Sha*_*non 5 cron logs

我有 3 个脚本/etc/cron.daily。我的 cron 日志是用/var/log/cron. 以下是已运行的上述 cron 的条目。

(root) CMD (run-parts /etc/cron.hourly)
Run Code Online (Sandbox Code Playgroud)

这里cron 中的脚本的stdoutorstderr不可用,它表明该run-parts命令已在此文件夹上运行。

是否有任何技巧可以帮助记录执行 3 个脚本时发生的情况?

注意:我无法编辑脚本cron.daily以将输出和错误重定向到日志文件。

Bra*_*ley 3

在 Unix 上,邮件系统是将系统通知传递给用户的方式。您可以将其视为有点像在 Windows 上,如果需要通知您某件事,任务栏中会显示一些内容并带有弹出消息。由于 cronjobs(理论上)不应该产生任何输出(因为没有人应该在那里看到它),因此任何输出(stdout 或 stderr)都被视为可能表明错误或问题,因此会向cronjob 的所有者提示他们检查一下。

因此,所有输出(stdout 和 stderr)都通过本地邮件系统发送给 cronjob 的所有者。如果所有者是非个人帐户,您可以通过设置别名指示本地 MTA 中继到真实的电子邮件帐户。例如,我添加到/etc/aliases

root: joel.davis@xxx.com
Run Code Online (Sandbox Code Playgroud)

然后运行newaliases命令(重建邮件别名数据库)。之后,我开始在我的公司电子邮件收件箱中收到 root 的电子邮件:

root@xxxxxxvlp05 ~ $ echo "the game" | mutt root -s "No Diggity"
sendmail: warning: inet_protocols: IPv6 support is disabled: Address family not supported by protocol
sendmail: warning: inet_protocols: configuring for IPv4 support only
postdrop: warning: inet_protocols: IPv6 support is disabled: Address family not supported by protocol
postdrop: warning: inet_protocols: configuring for IPv4 support only
Run Code Online (Sandbox Code Playgroud)

看看它的所有荣耀

这或多或少是正常的方式(让系统发送通知电子邮件)。还有其他处理通知的方法。一些替代方案:

修改别名以将电子邮件保存到特定文件:

root: /var/log/rootMails
Run Code Online (Sandbox Code Playgroud)

将邮件通过管道传输到脚本:

root: |/usr/local/bin/filterMail
Run Code Online (Sandbox Code Playgroud)

解决别名问题的另一种方法是使用MAILTO=许多 cron 守护程序支持的用户 crontab 中的选项。如果您只想接收一组特定的用户通知,而不是任何将放入其邮箱的内容(这就是实现的效果aliases),那么这可能是更好的选择。

我确信还有很多其他的,但您可能想做第一个或最后一个。