如果我运行crontab -e
,Ubuntu 会显示当前用户的默认 cron 作业:
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
请注意这样说的部分:
crontab 作业的输出(包括错误)通过电子邮件发送给 crontab 文件所属的用户(除非重定向)。
如何查看此输出?什么电子邮件与我的 Linux 用户相关联?
如果我查看grep CRON /var/log/syslog
,我会看到这样的行:
Feb 10 17:27:01 desktop-ubuntu CRON[36079]: (CRON) info (No MTA installed, discarding output)
我假设 MTA 是指邮件传输代理。输出似乎被丢弃了。
就个人而言,我希望将输出保存在某个地方,而无需转到 Internet 上的真实电子邮件地址。但我的问题更多是关于理解默认行为。
为了让 cron 发送电子邮件,您需要安装 postfix 或其他 MTA(邮件传输代理)。
如果没有设置特定的电子邮件地址,邮件将被发送到位于 的内部用户电子邮件地址
/var/mail/<username>
。您还可以指定 cron 将变量发送到的外部电子邮件地址
MAILTO
。所以在你的 crontab 中,设置:然后 cron 将向该地址发送电子邮件。
如果您想禁用 cron 发送电子邮件,请在 crontab 中设置:
这将是您控制默认行为的方式。
我喜欢@Artur Meinild 的回答,我想更深入地挖掘一下,因为我真的很想了解它是如何工作的。通过启用源代码存储库并运行
apt-get source cron
. 这是我学到的:cron 只是使用命令
sendmail
要发送电子邮件,cron 只需运行命令
sendmail
,如下所示:(确切的命令行参数可能有所不同,但这就是它的要点)
MAILTO
是可以在 crontab 中设置的环境变量。如果未设置,则LOGNAME
使用环境变量代替。Cron 设置LOGNAME
为 Linux 用户的用户名。来自man 5 crontab
:默认情况下,Ubuntu 不附带
sendmail
安装的命令。在这种情况下,您会在日志中注意到此错误:几个不同的软件包
sendmail
在 Ubuntu 上提供了一个命令。经常推荐的一种是后缀:(在安装过程中出现提示时,我选择了“仅限本地”选项,因为我对通过 Internet 发送电子邮件不感兴趣。)
Postfix 安装命令
sendmail
是为了与其他包(如 cron)兼容,这些包希望sendmail
找到命令。还安装的其他软件包sendmail
是:似乎如果使用“仅限本地”配置安装 postfix,那么发送到 Linux 的邮件就会存储在这个位置
/var/mail/<username>
。以下是运行的 cron 作业运行后该文件的一些示例内容echo hi
:如果您愿意,可以使用 mutt(在命令行上)或 Thunderbird(带有 GUI)之类的邮件客户端来查看存储在该位置的这些电子邮件。
参考: