Crontab 仅针对 Root 的 crontab 中的一项特定作业更改 MAILTO

Gre*_*hal 11 cron email

我是否可以执行以下操作来更改 root 的 crontab 中某个特定 crontab 作业的邮件发送位置(不要发送到 root 执行 Do something 作业,只需发送到 piglover):

# Make a hambone appear
* * * * * /scripts/hambone.pl

# Eat Ham
* * * * * /scripts/manga_ham.py

OLDMAILTO=$MAILTO

MAILTO=porklover.cramble.edu

#Do something
* * * * * /scripts/chown_abrahams_niece.sh

MAILTO=$OLDMAILTO
Run Code Online (Sandbox Code Playgroud)

Gil*_*il' 9

在传统的 cron 实现中,你不能这样做。crontab 中的变量定义是全局的,并且 cron 对所有命令使用相同的电子邮件地址。

一种解决方法是使用本地地址并根据输入重定向。

将作业的输出发送到不同地址的另一种方法是手动发送。请参阅如何将输出从一个进程传送到另一个进程,但仅在第一个进程有输出时才执行?对于各种方法。


一些现代 cron 实现,至少在 systemd 中,以不同的方式解析 crontab(感谢geedoubleyajarauh):只有工作线以上的分配适用于该工作。因此,如果您使用的是现代 Linux 系统,则有可能做到这一点。检查系统上的文档 ( man 5 crontab)。

您仍然无法执行您在问题中提出的建议,因为 cron 不会扩展变量赋值的右侧。MAILTO=$OLDMAILTO设置MAILTO为以美元符号开头的值。您需要重复旧地址。

# Make a hambone appear. Email sent to the user running the crontab.
* * * * * /scripts/hambone.pl

MAILTO=abrahams@example.com
#Do something. Email sent to abrahams@example.com
* * * * * /scripts/chown_abrahams_niece.sh

MAILTO=
# Hunt rabbits. Doesn't send email.
* * * * * /scripts/hunt.pl --rabbits

MAILTO=bob
# Eat Ham. Email sent to bob on the local machine.
* * * * * /scripts/manga_ham.py
Run Code Online (Sandbox Code Playgroud)

还要注意,MAILTO=porklover.cramble.edu将邮件发送到porklover.cramble.edu本地机器上的帐户。这可能不是你想要的。