如何停用 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 作業時,做同樣的事情。

相關內容