關於linux定時任務crontab不能執行等的一些問題

crontab是linux下實現定時任務的命令,但是他還是有很多坑需要我們注意,這裏列舉一些,如果遇到新的會再更新。
1.shell腳本能單獨運行,但是計劃任務裏面無法運行
這種問題往往是環境變量的問題,就是你所執行的命令沒有明確一些環境變量。建議的解決辦法:
(1)在所寫腳本上加入環境變量,如下:

export PATH=/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/home/x/bin:/usr/bin

或者加入這句話

source ~/.bash_profile

(2)將所有的涉及到文件夾的都用絕對地址而不用相對地址
雖然上面導入了環境變量,但是還是建議寫完整的絕對地址,比如python,寫成/usr/bin/python。特別是有寫入文件的情況,比如原來的shell腳本本來是

python 1.py >> 1.txt

一定要寫成這樣

/usr/bin/python /home/1.py >> /home/1.txt

(3)將crontab裏面的定時執行命令進行一些修改,如下:
將crontab執行的語句進行修改:
15 11 * * * /home/loganalysis/dealexcel.sh >> /home/loganalysis/error.log 2>&1
修改爲:
15 11 * * * cd /home/loganalysis/ && ./dealexcel.sh >> /home/loganalysis/error.log 2>&1
這個方法引用於https://blog.csdn.net/jkunzhang/article/details/7440215 這篇文章
2.如果腳本里面帶有參數,無法執行
如果你已經注意了上面的問題,但是你的腳本有參數,例如原腳本如下:

python test.py -s 123456 -p 123456

你在crontab裏面寫成了這樣

* * * * * /usr/bin/python /home/test.py -s 123456 -p 123456

這種有參數的建議的做法是創建一個shell腳本把這個腳本全部寫在shell腳本里,例如上面的例子,我們創建一個test.sh,test.sh的內容如下:

#!/bin/bash/
export PATH=/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/home/x/bin:/usr/bin
/usr/bin/python /home/test.py -s 123456 -p 123456

然後我們在crontab這樣寫

* * * * * /home/test.sh

這個時候如果不能執行,就是這個shell腳本沒有執行權限,使用命令chmod a+x test.sh
如果還不能執行的話,就按照第一點的第三小點,改寫成下面這樣:

* * * * * cd /home/ && ./test.sh
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章