2012-03-12 31 views
2

我在/usr/share/myscript.pycron作業來執行腳本和郵件錯誤

我想從一個cron作業,其中如果腳本產生任何錯誤,電子郵件這些錯誤特定用戶執行這個腳本Python腳本(和不通知根帳戶)。

我不想重載任何cron設置 - 其他cron作業仍應通知root。

目前我正在使用一個shell包裝程序,它應該將錯誤管理到日誌文件,然後通過電子郵件發送給我。然後cron作業直接執行這個.sh文件而不是python腳本。

#!/bin/sh 
python /usr/share/scripts/myscript.py 2>&1 > /home/me/logs/myscript.log 
test -s /home/me/logs/myscript.log && cat /home/me/logs/myscript.log | mail -s "myscript errors" [email protected] 

在生產中,如果沒有出現問題,那麼腳本將正確執行並且沒有人通過電子郵件發送。但是,如果在執行python腳本時出現錯誤,那麼這仍然會從cron通過電子郵件發送給root用戶。

我應該如何更改.sh腳本來抑制這種情況並反饋給我?

回答

2

此命令執行錯誤的輸出重定向不是你想要的順序:

python /usr/share/scripts/myscript.py 2>&1 > /home/me/logs/myscript.log 

,而不是你需要重定向第一標準輸入和stderr第二,像這樣:

python /usr/share/scripts/myscript.py > /home/me/logs/myscript.log 2>&1 

而且,你有沒有將>/dev/null 2>&1追加到crontab中的包裝腳本調用的結尾?

+0

最後一部分是做什麼的? – meepmeep 2012-03-13 09:22:59

+0

'>/dev/null 2>&1'禁止你在cron中執行的命令的輸出,所以不應該發送郵件 – Alex 2012-03-13 13:21:23

+0

昨天晚上腳本失敗了,這一切都很完美 - 謝謝! – meepmeep 2012-03-14 10:40:56