在新裝的linux服務器上部署了一個作業監控磁盤空間并提前告警,在shell腳本里面調用了一個perl腳本發送告警郵件。結果出現了一個很奇怪的現象:如果手工執行該腳本/home/Oracle/scripts/disk_capatiy_alarm.sh能發出告警郵件,但是在crontab里面發現腳本沒有發出告警郵件。檢查了/var/log/cron后發現該作業執行了。最后發現shell執行了,但是perl腳本沒有執行。搜索了相關資料后,了解到一般出現這種情況要么是因為環境變量,要么是因為使用了相對路徑。因為crontab它總是不會缺省的從用戶PRofile文件中讀取環境變量參數,經常導致在手工執行某個腳本時是成功的,但是到crontab中試圖讓它定期執行時就是會出錯.
我首先將perl ${email_content} 改成了使用絕對路徑/usr/bin/perl ${email_content} ,測試依然不行
因此在腳本里面應用環境變量./etc/profile 。 問題解決了。雖然寥寥幾字,但是從問題糾結我開始到問題解決?;旧匣ㄙM了半天時間。網上也有不少人碰到過這種情況。
參考資料:
http://blog.slogra.com/post-238.html
新聞熱點
疑難解答