crontab不能成功执行shell脚本的可能原因
2014-01-18 17:45
281 查看
我们经常会需要使用crontab进行定时任务,但crontab不能成功执行脚本的情况还是很常见,总结起来,本人了解到的和自己遇到的可能原因主要有以下几个:
1. crond进程不存在,该进程是crontab的守护进程,它必须存在才能让crontab正常使用;
2. 系统时间不对;
3. 环境变量的问题:crontab执行脚本的时候不会读取用户的环境变量等配置,所以可能很多命令不能使用导致脚本执行失败;
4. 脚本本身的问题。
针对以上几点,在使用crontab之前,我们应该:
1. 检查crond进程是否正在正常运行;
2. 这个很少见,毕竟大多数情况我们的时间都很标准,不过要是用不熟悉的机器,最好还是date一下;
3. 这个应该是最容易出现的问题了,针对这种问题:
a. 在编写shell脚本的时候尽量用绝对路径使用命令;
b. 在脚本开头export一下路径(长见的命令一般在/bin,/sbin,/usr/bin,/usr/sbin这几个路径下,所以不妨全部export一下:export PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin,如果不全部export的话,记得把使用到的命令which一下以确定命令的真实路径;
c. 使用脚本调用别的脚本,比如有三个脚本:run1.sh,run2.sh,run3.sh,假设这三个脚本都使用了cat、grep等命令,那么它们直接放在crontab中是不会被成功执行的,这时候我们可以写个run.sh,在run.sh中调用run1.sh,run2.sh,run3.sh,这样就不需要考虑export环境变量的问题,因为run.sh并没有使用系统命令,而run.sh调用run1.sh的时候已经不是crontab在管理了,所以会读取用户的环境变量。
4. 拉出去枪毙吧,只能自己检查问题了,可以先手动执行一次,如果成功执行再考虑crontab相关的问题,不然诸如没有+x就放进crontab的问题肯定是不该的。
总之,前两个问题比较好查,而后两个问题,我们可以通过在脚本开头打log等方式确定是脚本没有执行还是没有成功执行到结束。
1. crond进程不存在,该进程是crontab的守护进程,它必须存在才能让crontab正常使用;
2. 系统时间不对;
3. 环境变量的问题:crontab执行脚本的时候不会读取用户的环境变量等配置,所以可能很多命令不能使用导致脚本执行失败;
4. 脚本本身的问题。
针对以上几点,在使用crontab之前,我们应该:
1. 检查crond进程是否正在正常运行;
2. 这个很少见,毕竟大多数情况我们的时间都很标准,不过要是用不熟悉的机器,最好还是date一下;
3. 这个应该是最容易出现的问题了,针对这种问题:
a. 在编写shell脚本的时候尽量用绝对路径使用命令;
b. 在脚本开头export一下路径(长见的命令一般在/bin,/sbin,/usr/bin,/usr/sbin这几个路径下,所以不妨全部export一下:export PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin,如果不全部export的话,记得把使用到的命令which一下以确定命令的真实路径;
c. 使用脚本调用别的脚本,比如有三个脚本:run1.sh,run2.sh,run3.sh,假设这三个脚本都使用了cat、grep等命令,那么它们直接放在crontab中是不会被成功执行的,这时候我们可以写个run.sh,在run.sh中调用run1.sh,run2.sh,run3.sh,这样就不需要考虑export环境变量的问题,因为run.sh并没有使用系统命令,而run.sh调用run1.sh的时候已经不是crontab在管理了,所以会读取用户的环境变量。
4. 拉出去枪毙吧,只能自己检查问题了,可以先手动执行一次,如果成功执行再考虑crontab相关的问题,不然诸如没有+x就放进crontab的问题肯定是不该的。
总之,前两个问题比较好查,而后两个问题,我们可以通过在脚本开头打log等方式确定是脚本没有执行还是没有成功执行到结束。
相关文章推荐
- Java执行Shell脚本“No such file or directory”异常的可能原因
- Java执行Shell脚本“No such file or directory”异常的可能原因
- Java执行Shell脚本“No such file or directory” (win->Linux)异常的可能原因
- shell脚本放到crontab里就执行不成功的问题
- 运维经验分享(六)-- 深究crontab不能正确执行Shell脚本的问题(二)
- crontab的定时任务不能自动执行,但是手动执行脚本一直能成功
- 使用crontab定时执行shell脚本
- MySQL使用mysqldump备份数据库脚本手工执行成功 crontab定时却失败的解决方法
- 执行脚本时始终停留在登录界面可能原因
- Linux中使用crontab命令定时执行shell脚本或其他Linux命令
- crontab不能执行shell中的mysql命令
- crontab 不能执行的原因总结
- 为什么直接执行shell脚本可以,但crontab下执行错误
- 如何在shell脚本中,判断一个基本命令执行是否成功?
- shell脚本直接执行没有问题,crontab定时执行失败的解决方法
- linux系统crontab执行jar包的shell脚本
- crontab中使用环境变量的方法(手动执行shell脚本可以,在定时任务中不行)
- 使用crontab,让linux定时执行shell脚本
- scala脚本不能执行的原因
- [转] 关于crontab无法执行shell脚本的解决办法