場景: 需要在系統的cron中啓動一個計劃任務,跑的是一個shell腳本,腳本中大致意思是切換至
abc用戶執行一個php文件(例如: /data/soft/auto.php),那麼現在問題來了,腳本的內
容如下:
#!/bin/bash sudo -u abc /data/soft/auto.php echo ' >>> auto success !!! ’
你會神奇的發現,系統的/var/log/cron日誌中已經顯示auto success,但是這個程序依然
是沒有執行,你怎麼知道沒執行呢?因爲程序有日誌,日誌沒開始刷.
那麼下一步該怎麼來查找程序未執行的原因?思路是每次執行cron的時候必定會產生記錄的文件
根據系統版本查找文件的位置:
操作系統版本4/5 查看 /var/spool/clientqueue/
操作系統版本6 查看 /var/spool/postfix/maildrop/
系統的postfix停掉,沒停掉就直接敲mail命令看
進入對應的目錄後可以使用 ls -lt|head 命令來截取最後執行的10個cron日誌文件,根據時間來判定看
哪個文件,裏面必定有報錯.根據報錯來修改腳本或者系統屬性.
我遇到過的兩種情況:
1. sudo系統默認警告需要tty,解決辦法:將/etc/sudoers文件中Defaults requiretty註釋掉.
2. 變量路徑引起的,加載你所需要的變量或者定義.
好久沒有寫,這個問題值得記錄,相信很多人還不知道這個排錯方式,這也是剛從別人那學的.