Linux
Cron:僅當輸出包含字元串時才發送郵件
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 是