Crontab任务无法自动定时执行

发布于 2015-10-22 作者 [重庆SEO]

更新于 2016-09-10

安装crontab服务并写入相应任务后,遇到crontab没执行,优先查看crontab服务是否有正常运行,

service crond status

如果检查发现服务正常运行,就有可能是脚本环境问题了。

学习linux时在crontab常犯的2个错误就是环境变量和路径问题,直接shell脚本能正常,有时候/var/log/cron日志有记录,但是crontab并没有按脚本的定义那样有正确执行的结果。这些问题都可以通过以下办法解决掉!

有时我们创建了一个crontab,但是这个任务却无法自动执行,而手动执行这个任务却没有问题,这种情况一般是由于在crontab文件中没有配置环境变量引起的。

在crontab文件中定义多个调度任务时,需要特别注环境变量的设置,因为我们手动执行某个任务时,是在当前shell环境下进行的,程序当然能 找到环境变量,而系统自动执行任务调度时,是不会加载任何环境变量的,因此,就需要在crontab文件中指定任务运行所需的所有环境变量,这样,系统执 行任务调度时就没有问题了。

不要假定cron知道所需要的特殊环境,它其实并不知道。所以你要保证在shelll脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。所以注意如下3点:

1.脚本中涉及文件路径时写全局路径;

2.脚本执行要用到java或其他环境变量时,通过source命令引入环境变量,如:

cat start_cbp.sh
!/bin/sh
source /etc/profile
export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf
/usr/local/jboss-4.0.5/bin/run.sh -c mev &
3.当手动执行脚本OK,但是crontab死活不执行时,很可能是环境变量惹的祸,可尝试在crontab中直接引入环境变量解决问题。如:

0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh
这里还有一种情况:crontab执行脚本中文乱码,手动执行正常