Linux

Cron:僅當輸出包含字元串時才發送郵件

  • February 21, 2017

stderr如果輸出( )包含某個字元串,我可以讓 cron 僅發送電子郵件嗎?

我知道這個答案,但我執行的命令不區分stdout/ stderr,它總是只輸出到stdout,所以我需要尋找一個字元串。

到目前為止,我得到了這個,它基本上可以工作,除了 grep 不會將輸出傳遞給 mail 命令,所以我只收到一封空電子郵件:

0 5 * * * root mycommand | grep -q 'Renewal was done' && mail -s 'Renewal completed' my@email.com

如何從電子郵件中包含的 mycommand獲取整個輸出?

我強烈建議您將邏輯放入腳本中並在 cron 中執行該腳本,而不是嘗試在 cron 中製作一個單行腳本。這樣您就可以輕鬆地在 cron 之外對其進行測試,例如:

#!/bin.bash
tmp=/tmp/t$$
mycommand > $tmp 
if grep -q 'Renewal was done' $tmp
then
   mail -s 'Renewal completed' my@email.com < $tmp
fi

rm -f $tmp
exit 0

您可以添加對 mycommand 退出狀態的檢查、傳遞正在執行的命令、匹配的字元串以及作為參數的電子郵件地址等。

這可能會奏效。

#!/bin/sh
命令=`我的命令`
FINDSTR="更新完成"

答案 = `$COMMAND | grep $FINDSTR`

如果 $ANSWER; 然後
echo $ANSWER > mail -s '續訂完成' my@email.com
是

引用自:https://serverfault.com/questions/833170