在 Ubuntu 18.04 上,man cron
说
cron 将其操作记录到 syslog 工具“cron”,并且可以使用标准 syslogd(8) 工具来控制日志记录
此外,cron 的默认配置由 /etc/default/cron 控制,该配置由启动 cron 守护进程的 init.d 脚本读取。该文件确定 cron 是否会读取系统的环境变量,并使得可以在执行之前向 cron 程序添加其他选项,以配置其日志记录或定义它将如何处理 /etc/cron 下的文件。 d.
我添加了一个工作到/etc/crontab
* * * * * t ( date && echo $PATH && date )
我尝试查找作业的输出,但为什么在系统日志中找不到它?谢谢。
$ less /var/log/syslog
...
Nov 3 12:21:01 ocean CRON[23992]: (t) CMD (( date && echo $PATH && date ) )
Nov 3 12:21:01 ocean CRON[23985]: (CRON) info (No MTA installed, discarding output)
$ cat /etc/default/cron
# This file has been deprecated. Please add custom options for cron using
# $ systemctl edit cron.service
# or
# $ systemctl edit --full cron.service
答案1
cron
记录其行动到syslog
,详细级别取决于配置的日志级别。这不包括就业的产出。
关于后者,手册页说
执行命令时,任何输出都会邮寄给 crontab 的所有者(或者发送给 crontab 中 MAILTO 环境变量中指定的用户,如果存在的话)。
由于您没有配置 MTA,因此输出将被丢弃,如日志中所示。
如果您想配置 MTA,Debian 及其衍生版本中的 MTA 软件包附带了很好的安装脚本,可以为您配置简单的设置;sudo apt install postfix
并按照提示操作。
或者,您可以使用以下命令将 cron 作业的输出重定向到系统日志logger
:将作业的输出通过管道传输到logger -p cron.info
(对于常规输出)和logger -p cron.err
(对于错误)。
cron 期望通过电子邮件发送输出的原因是 cron 作业的输出的粒度与系统记录器的粒度不匹配(日志不是按用户存储的)。系统的每个用户都可以设置 cron 作业,但用户不一定有权访问系统日志,并且他们可能不希望有权访问这些日志的所有其他用户查看其作业的输出。当设计 cron 时,电子邮件是一种将 cron 作业的输出发送给管理它的用户的明智方式:人们期望 Unix 系统有一个有效的电子邮件设置。如今,这一点不再那么明显,不是因为电子邮件的适用性发生了变化,而是因为它的可用性发生了变化。在具有工作电子邮件的系统上,将其用于 cron 输出仍然有意义;或者,作业可以输出到每个用户的日志文件(每个作业中都有特定的重定向)。
systemd 计时器不会遇到这个问题:用户计时器记录到私有的、每用户的日志中。