1. 程式人生 > >Crontab指令碼無法正常執行問題

Crontab指令碼無法正常執行問題

Crontab執行時若有異常首先要到/var/log下檢視cron日誌檔案檔案(vi /var/log/cron),也可以使用用tail -f /var/spool/mail/root 檢視最近的crontab執行情況。通常在日誌中能夠檢視到異常都是指令碼寫的不正確導致的,可以手動執行看下具體原因。若在日誌中看到指令碼正常執行,但是無正確的預期結果,則無非是兩種原因:

1.環境變數配置不正確
之前在使用crontab呼叫python指令碼執行BCP匯入匯出時始終無法成功執行,檢視日誌也沒有任何異常產生,多次嘗試之後發現原來需要在crontab的PATH下配置相應的環境變數才能正常執行BCP指令。
如下,PATH中加上BCP執行環境變數即可

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/opt/mssql-tools/bin
MAILTO=root

2.路徑問題
有些指令碼涉及到檔案操作,檔案路徑不正確也會導致指令碼無法正常執行,建議使用絕對路徑,或者在執行指令碼時,先進入該指令碼的路徑下,在執行。Crontab的command配置如下:

*/10 * * * * cd /home/work/testCron && ./testCron.sh

3.command指令問題
對於指令配置不正確的問題,請自行百度之

補充:
還有一種情況是windows下寫的指令碼直接放在linux下執行。windows下的檔案是dos格式的,而linux只能執行unix格式的指令碼,所以crontab會執行失敗。你如果手動執行指令碼
會報出: No such file or directory 這個錯誤。
解決方法:
首先在vi模式下使用指令 :set ff 檢視檔案格式
會出現 fileformat=dos 這樣的結果
然後使用指令 :set ff=unix 修改檔案格式
wq儲存即可,再次手動執行發現不再報:檔案目錄不存在的錯誤 就可以放在crontab下執行了