自认为cron用得还算上手,没想到今天还是中招了。
再次总结一下,加深印象。
一定要注意使用绝对路径,而绝对路径又要注意以下两点:
1. crontab -e里命令中的文件路径
2. 定时计划任务执行的脚本里的文件路径
本次我中的就是第2招。
看我的具体例子就清楚了。
为了测试定时计划任务执行bash脚本是否正常,我打算写个bash脚本,要做的事情就是删除一个文件。
如果文件删除成功了,我就默认定时计划任务执行正常。
我的检验步骤:
1. 在/data/www目录下新建了一个zhai.log文件。
2. 在/data/www目录下新建了一个test.sh文件,内容如下:
#!/bin/bash rm -f zhai.log
3.在crontab -e中加入了如下命令:
1/* * * * * /bin/bash /data/www/test.sh > /dev/null 2>&1
结果等半天,文件并没有删掉。按理论应该隔个1分钟文件就会被删掉的。
检查服务正常,检查日志也正常,把命令拿出来单独执行也ok(我没换目录,仍然在/data/www目录下执行的),所以当时就有点纳闷了。
顺便提下上面命令里定时的顺序。
在以往的文章有总结过这个时间顺序的记忆技巧,今天再次跟大家一起重温下:
记忆诀窍:分时日月周,分时,谐音粉丝,日月,是自然朗读的顺序。
ok,回到我的步骤当中去。
第3步,可以看出,无论是bash命令位置,还是test.sh脚本文件位置,我都是用了绝对路径的。
但是,test.sh里zhai.log这个文件我没有用绝对路径,才导致我没能如愿的看到zhai.log文件被删除。
最终将test.sh改成如下就ok了:
#!/bin/bash rm -f /data/www/zhai.log
本文是翟码农个人博客里linux分类下的文章,转载请注明出处:http://www.zhai14.com/blog/a39d983bed7a28b0d4611ada8d5b9336.html
简单总结一下:
当遇到定时计划任务不成功时,记得从以下几个方面进行检查。
1. 命令单独放在任意目录下执行,检验脚本功能是否正常。注意,是饪意二字。
重点:定时计划任务里的命令,要记得更换目录后再执行测试一下
2. 检查定时计划任务是否开启
ps -ef |grep crond
看到crond就表示crond服务有开启
或者用下面命令:
service crond status
提示Pid xxxx is runing...,则也代表crond服务已开启
3.检查cron日志
有时日志会显示很清楚的错误提示。