crontab不執行perl腳本分析

在新裝的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} ,測試依然不行

clip_image001

因此在腳本里面應用環境變量./etc/profile 。 問題解決了。雖然寥寥幾字,但是從問題糾結我開始到問題解決。基本上花費了半天時間。網上也有不少人碰到過這種情況。

clip_image002