如何禁用 at 作业的邮寄输出?

如何禁用 at 作业的邮寄输出?

我想禁用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 atRedHat 上指示 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 作业时,做同样的事情。

相关内容