crontab定時任務不執行的一些緣由總結
更新時間:2019年01月09日09:34:57作者:田野上的希望
這篇文章主要給你們總結介紹了關於crontab定時任務不執行的一些緣由,對每種可能發生的誘因都給出了解決方式,對遇見這個問題的同事們具有一定的參考學習價值,須要的同學下邊隨著小編來一起學習學習吧
序言
最近在工作上遇見了一些問題,crontab定時任務竟然不執行,後來我在網上找的時侯發覺網上主要說了這5個誘因:
1crond服務未啟動
crontab不是Linux核心的功能,而是依賴一個crond服務,這個服務可以啟動其實也可以停止。假如停止了就難以執行任何定時任務了,解決的方式是打開它:
crond
或
service crond start
假如提示crond指令不存在,可能被刪掉不僅,CentOS下可以透過這個指令重新安裝:
yum -y install crontabs
2權限問題
例如:腳本沒有x執行權限,解決方式:
降低執行權限,或則用bashabc.sh的方式執行
也有可能crontab任務所屬的使用者對某個目錄沒有寫權限,也會失敗
3路徑問題
有的指令在shell中執行正常,然而在crontab執行卻總是失敗。有可能是由於crontab所使用的sh未正確辨識路徑,例如:以root身分登錄shell後執行一個/root/test.sh,只要執行
./test.sh
就可以了。並且在crontab中,都會找不到這個腳本,例如寫完整:
/root/test.sh
4時差問題
#由於伺服器與客戶端時差問題linux是什麼,所以crontab的時間以伺服器時間為準。
時差這個問題還真是搞人,這個我親身體驗了,現像如下:
(1)我設定了一個定時腳本,用date指令觀察伺服器的時間到了腳本執行的時間點,發覺沒有執行
(2)而我把腳本設定成每分鐘執行一次,就是OK的
見鬼了,伺服器時間是對的啊?難道是要加個哪些時區?於是把腳本的時間減10或則12或則8小時都嘗試了下,發覺都不行。
然而很显著是时间不一致引起的不执行。
最后用如下两行解决了问题:
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime service crond restart
参考这篇文章:
5变量问题
有时侯命令中富含变量,但crontab执行时却没有,也会导致执行失败。
验证后,我的定时脚本test.sh不执行不是上述任何一种缘由,虽然我的脚本就一句话:
#!/bin/bash echo 123 >> testFile
我希望通过这些方法来测试我设置的定时脚本起作用了,于是我设置了该脚本每分钟执行一次,而且死活在脚本所在目录看不到这个文件linux 计划任务没执行,我自动执行
# sh test.sh
却能看见在脚本所在目录能看见这个文件
我怀疑是crontab根本没有执行,于是我在crontab中直接添加了
*/1 * * * * echo 123 >> /home/denglinjie/testFile
testFile文件生成了,说明crontab是执行了的,那看来是我脚本自身存在问题
最后发觉,原先是testFile这儿必须写完整的路径,我天真的以为testFile会生成在脚本所在的目录,所以改成了如下方式
#!/bin/bash echo 123 >> /data/denglinjie/testFile
之后就可以了。
虽然路径是个十分容易出问题的地方,假定在/home/denglinjie目录下有一个脚本文件test1.sh,之后在该目录下还有一个脚本文件test2.sh
在test1.sh中执行了test2.sh,并且用的是相对路径,即相对test1.sh所在的路径。
若果在crontab-e中编辑的时侯,执行的方法是
sh/home/denglinjie/test1.sh,当执行到调用shtest2.sh的时侯,系统会觉得是从crontab文件所在的目录去找test2.sharm linux,而且显然是找不到的,导致执行失败
最开始我想的方式是,我要将我写的待执行的脚本文件以及被调用的其他的脚本和crontab文件放在一个地方,这样就可以拉,并且失败了,可能是由于权限问题,我进不去/var/spool/cron目录。
所以另外一个解决方式就是在执行脚本之前先通过cd/home/denglinjie命令步入到脚本所在目录
------------------------------------------------------------------
近来又发觉一种新的导致crontab不执行的诱因
这儿我要执行的是python脚本,我python脚本的目录为:
/data/denglinjie/work/UpdateModuleSwitch
一开始我的定时任务是这样写的:
0 * * * * cd /data/denglinjie/work/UpdateModuleSwitch;python update_switch.py
发觉到了时间点竟然没有执行,其中update_switch.py的部份内容如下:
import pymongo
就是我的脚本中引入了自己安装的pymongo,注意,这个pymongo是安装到了指定的python版本上的
不执行缘由:crontab定时任务执行的时侯,使用的python不是我的那种python,使用的这个python没有安装pymongo,致使import失败
解决办法,改成如下方式:
0 * * * * cd /data/denglinjie/work/UpdateModuleSwitch;/data/zhoumi/install_evn/bin/python update_switch.py
指定运行使用的python,这个python早已安装绑定了pymongo,或则用如下方式:
0 * * * * export PATH=/data/zhoumi/install_evn/bin/:$PATH;cd /data/denglinjie/work/UpdateModuleSwitch;python update_switch.py
由于我的这个python是安装在我自己的用户目录下linux 计划任务没执行,所以系统找不到这个python,所以只要将我的python也加入到系统PATH环境变量中就可以了
总结
以上就是这篇文章的全部内容了,希望本文的内容对你们的学习或则工作具有一定的参考学习价值,假如有疑惑你们可以留言交流,感谢你们对本站的支持。
以上是crontab定時任務不執行的一些原因,你知道嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!