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