Answers:
考虑到记录数据的传统“标准”方式是syslog,其中消息中包含的元数据是“设施代码”和优先级。设施代码可用于将日志流与不同服务分开,以便可以将它们拆分为不同的日志文件等(即使设施代码在某种程度上受到限制,因为它们具有固定的传统含义)。
syslog没有的是一种为不同用户分离消息或从不同用户分离消息的方法,而这cron
是传统的多用户系统所需要的。将所有用户的cron作业中的消息收集到一个通用日志文件中是没有用的,只有系统管理员才能看到它们。另一方面,电子邮件自然可以将消息发送给不同的用户,因此这是合乎逻辑的选择。另一种选择是让cron手动完成工作,并创建每个用户主目录的日志文件,但是假定传统的多用户Unix系统具有正常的MTA,因此在cron中实现它通常是徒劳的运动。
当然,在现代系统上,可能会有其他选择。
我认为“记录”是指存储作业的实际输出。作业的运行已经在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
,错误消息仍将通过电子邮件发送。
这允许用户选择输出的位置。