我想禁用at
某类作业的邮件通知。例如,在测试下面的用例时(在中途终止工作)我不想要输出,但生产中的相同代码我确实想要邮寄的输出:
$ at now <<<'/usr/bin/timeout 15s nc -l 20242'
job 71 at 2016-05-16 15:03
$ pidof /usr/bin/timeout
11853
$ kill 11853
$ mail
Heirloom Mail version 12.4 7/29/08. Type ? for help.
"/var/spool/mail/bishop": 1 message 1 new
>N 1 bishop@trencher Mon May 16 15:03 16/920 "Output from your job 71"
& 1
Message 1:
From bishop@trencher Mon May 16 15:03:30 2016
Date: Mon, 16 May 2016 15:03:30 -0400
From: bishop@trencher
Subject: Output from your job 71
To: bishop@trencher
Status: R
/bin/bash: line 1: 11853 Terminated /usr/bin/timeout 15s nc -l 20242
我知道我可以设置MAILPATH=/dev/null
,但我更喜欢更细粒度的控制。设置MAIL
并无MAILTO
明显效果。我以为我可以编辑作业以删除该# mail
指令,但这似乎不起作用:
at 15:15 <<<'date'
at -c 73 | grep -v '^# mail bishop' | at 15:15
atrm 73
我已经搜索了很多次,但我们只能说搜索名为 at 的命令并不简单。我什至找不到源代码:它不是在 GNU coreutils 中吗?
更新:站标识:
$ uname -a
Linux trencher 4.4.8-20.46.amzn1.x86_64 #1 SMP Wed Apr 27 19:28:52 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
$ at -V
at version 3.1.10
是否可以控制每个作业的输出(任何输出)是否邮寄给提交用户?
答案1
RedHat(以及 Centos 和朋友)at
以及 Debian 衍生版本(如rpm -qi at
RedHat 上指示 Debian URL,以及上面注释中的 derobert)应该支持一个-M
选项:
-M Never send mail to the user.
如果缺少这个,另一种选择是抑制作业的输出:
#!/bin/bash
exec >/dev/null 2>&1
... the usual job commands here ...
logger
或者,如果确实需要检查输出,则可以将输出通过管道传输到日志文件或日志文件。
另一种选择是更改邮件传输代理,特别是因为这些是开发系统,并将所有邮件放入/dev/null
或放入开发服务器上某处的邮箱文件中,但这需要更多工作。
答案2
at
在传递给的命令之前加上chronic
(从moreutils
包中),这样您仍然可以得到两个都stderr 和 stdout,如果命令退出时显示错误状态,否则什么也没有。
当你在做你的 cron 作业时,做同样的事情。