Title Text:Take THAT, piece of 1980s-era infrastructure I’ve inexplicably maintained on my systems for 15 years despite never really learning how it works.<
Origin:https://xkcd.com/1728/
https://www.explainxkcd.com/wiki/index.php/1728:_Cron_Mail
Cron Mail
在类Unix系统上,cron是一个按计划运行任务的系统实用程序。这个程序自Unix早期就已存在并且没有太大变化 – 它仍然是现代操作系统中使用最广泛的功能之一。服务器上的许多管理任务都是使用cron自动执行的,包括监视和更新。
当cron作业产生输出时,cron的默认行为是将电子邮件发送到作业运行的用户帐户。但是,在大多数情况下,尚未为该用户设置电子邮件地址,因此将电子邮件写入邮箱文件。当更新此邮箱文件时,大多数Unix shell将通过“您有新邮件”等消息通知用户,但如果用户不知道如何检查此邮件文件,他们可能会忽略该邮件。
在这种情况下,Cueball已经忽略了他的邮箱十五年了。当他终于知道在哪里看时,他发现了来自cron程序的超过一千兆字节的消息,其中绝大多数可能毫无意义。马尾辫表示Cueball“修复你的cron”(可能意味着修复生成输出的任务,使其不这样做),然后设置一个参数,告诉cron将电子邮件发送到他实际检查的地址。 (他也可以选择将邮件定向到/dev /null,这会丢弃它们,或者只是禁用crontab中的邮件。)然而,Cueball将大量的电子邮件解释为垃圾邮件并决定将电子邮件重定向到/etc /crontab,包含所有cron调度信息的主配置文件。他显然认为这会阻止电子邮件或导致cron自己发送垃圾邮件。
实际上,这不会导致重大问题,因为cron中的MAILTO环境变量在本地系统上获取电子邮件地址或用户名并尝试向其发送电子邮件。它不会将输出写入或附加到/etc /crontab等本地文件。因此,当cron尝试通过电子邮件发送/etc /crontab时,cron使用的邮件程序将生成错误,说它无法找到用户/etc /crontab。
例如,如果您创建以下crontab:
MAILTO = /etc /crontab中
* * * * * echo“来自cronjob的一些输出”
安装在名为mycomputer的系统上的名为me的用户上,然后您将看到一封新的错误消息,发送给您(位于/var /mail /me),说明它无法向名为/etc /crontab的用户发送电子邮件并且未送达电子邮件正在退回给发件人。错误电子邮件将如下所示:
来自MAILER-DAEMON Tue Sep 6 14:47:01 2016
返回路径:&lt;&gt;
X-Original-To:[email protected]
已发送至:[受电子邮件保护]
收到:mycomputer.local(Postfix)
id 5341C64EE516; 2016年9月6日星期二14:47:01 -0400(美国东部时间)
日期:2016年9月6日星期二14:47:01 -0400(美国东部时间)
来自:[email protected](邮件传递系统)
主题:未发送邮件返回发件人
收件人:[email protected]
自动提交:自动回复
MIME版本:1.0
内容类型:multipart /report;报告类型=递送状态;
边界= “33AF864EE514.1473187621 /mycomputer.local”
消息标识:&lt; [email protected]&gt;
这是一个MIME封装的消息。
–33AF864EE514.1473187621 /mycomputer.local
内容描述:通知
内容类型:text /plain;字符集= US-ASCII
这是主机mycomputer.local的邮件系统。
我很遗憾地告诉你,你的信息不能
交付给一个或多个收件人。它附在下面。
如需更多帮助,请发送邮件到邮政。
如果您这样做,请包含此问题报告。您可以
从附加的返回消息中删除您自己的文本。
邮件系统
&LT;的/etc /[电子邮件保护] GT; (从&lt; /etc /crontab&gt;扩展):未知用户:
“/etc /crontab中”
–33AF864EE514.1473187621 /mycomputer.local
内容描述:交付报告
内容类型:消息/传递状态
报告-MTA:dns; mycomputer.local
X-Postfix-Queue-ID:33AF864EE514
X-Postfix-Sender:rfc822; [电子邮件保护]
抵达日期:2016年9月6日星期二14:47:00 -0400(美国东部时间)
最终收件人:rfc822;在/etc /[电子邮件保护]
原件 – 收件人:rfc822; /etc /crontab中
行动:失败
现状:5.1.1
诊断代码:X-Postfix;未知用户:“/etc /crontab”
–33AF864EE514.1473187621 /mycomputer.local
内容描述:未发送消息
内容类型:message /rfc822
返回路径:&lt; [email protected]&gt;
收到:mycomputer.local(Postfix,来自用户ID 501)
id 33AF864EE514;星期二,2016年9月6日14:47:00 -0400(美国东部时间)
来自:[email protected](Cron Daemon)
收件人:/etc /[email protected]
主题:Cron&lt; [email protected]&gt;回声“一些来自cronjob的输出”
X-Cron-Env:&lt; MAILTO = /etc /crontab&gt;
X-Cron-Env:&lt; SHELL = /bin /sh&gt;
X-Cron-Env:&lt; PATH = /usr /bin:/bin&gt;
X-Cron-Env:&lt; LOGNAME = me&gt;
X-Cron-Env:&lt; USER = me&gt;
X-Cron-Env:&lt; HOME = /Users /me&gt;
消息标识:&lt; [email protected]&gt;
日期:2016年9月6日星期二14:47:00 -0400(美国东部时间)一些来自cronjob的输出
–33AF864EE514.1473187621 /mycomputer.local–
标题文本显示Cueball有点意识到cron的作用,包括它几十年来几乎没有变化的事实,但他并没有打算真正理解它,把它当作一个战胜敌人而不是战胜它作为理解和使用的工具。