为什么 cron 需要 MTA 进行日志记录?

为什么 cron 需要 MTA 进行日志记录?

为什么 cron 需要 MTA 进行日志记录?这有什么特别的好处吗?为什么它不能像大多数其他实用程序一样创建日志文件?

答案1

考虑到记录数据的传统“标准”方式是系统日志,其中消息中包含的元数据是“设施代码”和优先级。设施代码可用于将日志流与不同的服务分开,以便将它们拆分为不同的日志文件等(尽管设施代码有一定的限制,因为它们具有固定的传统含义。)

syslog 所没有的是一种为不同用户或从不同用户分离消息的方法,而这是cron传统多用户系统所需要的。将所有用户的 cron 作业中的消息收集到只有系统管理员才能看到的公共日志文件中是没有用的。另一方面,电子邮件自然提供了向不同用户发送消息的功能,因此这是一个合乎逻辑的选择。另一种方法是让 cron 手动完成工作,并为每个用户的主目录创建日志文件,但传统的多用户 Unix 系统会被假定有一个工作 MTA,因此在 cron 中实现它主要是无用的运动。

当然,在现代系统上,可能还有其他选择。

答案2

我认为“记录”是指存储作业的实际输出。这跑步作业已记录在 cron 日志中/var/cron/log(系统之间的路径可能有所不同)。此日志不需要 MTA。

cron 作业以该作业所属 crontab 的用户身份运行。

在一般情况下,不能保证该用户能够在系统上创建文件(用户可能不是交互式用户),尤其是在/var通常创建日志的层次结构下。因此,通知用户错误和其他作业输出的最安全方法是收集这些内容并通过电子邮件将其发送给用户。这还允许用户为帐户设置电子邮件重定向,以便能够看到例如其首选位置中的错误。

如果用户想要将作业的输出保存到文件中,他们可以通过 crontab 中的简单重定向来实现:

0 */2 * * * "$HOME/scripts/myscript" >"$HOME/logs/myscript.log" 2>&1

这将"$HOME/scripts/myscript"每隔一小时运行一次,并且会节省全部输出到"$HOME/logs/myscript.log".由于所有输出都被重定向,因此运行此作业不会创建任何电子邮件。如果没有2>&1,错误消息仍将通过电子邮件发送。

这允许用户选择输出的位置。

相关内容