Linux crontab执行错误问题

1. crond服务未启动
crontab不是Linux内核的功能,而是依赖一个crond服务,这个服务可以启动当然也可以停止。如果停止了就无法执行任何定时任务了。

解决方法:
启动crontab,执行命令:

crond

或者

service crond start

如果提示crond命令不存在,可能被误删除了,CentOS下可以通过这个命令重新安装:

yum -y install crontabs

2. 权限问题
脚本没有x执行权限。
解决方法:
增加执行权限,执行命令:

chmod a+x *.sh

或者直接使用bash的方法执行,执行命令:

/bin/bash *.sh

3. 路径问题
有的命令在shell中执行正常,但是在crontab执行却总是失败。有可能是因为crontab使用的sh未正确识别路径。
比如:以root身份登录shell后执行一个/root/test.sh,只要执行

./test.sh

就可以了。但是在crontab中,就会找不到这个脚本,比如写完整:

/root/test.sh

PS: 当执行命令包含python等命令,如下:

python /root/test.py

此时如果未执行,可能原因为python需要完整路径,修改如下:

/usr/local/bin/python /root/test.py

4. 时差问题
因为服务器与客户端时差问题,所以crontab的时间以服务器时间为准。

5. 变量问题
有时候命令中含有变量,但crontab执行时却没有,也会造成执行失败。

6. 环境变量问题
crontab的定时任务不能自动执行,但是手动执行脚本能成功。错误原因是脚本里用了系统的环境变量,但是crontab的环境变量与系统的不同。

执行命令:cat /etc/crontab ,如下所示,

[root@localhost byrbbs]# cat /etc/crontab 
SHELL=/bin/bash 
PATH=/sbin:/bin:/usr/sbin:/usr/bin 
MAILTO=root 
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

可以看到crontab的PATH变量的值和一般的环境变量不同,所以,这样会导致有时候执行的命令找不到位置,所以需要在脚本中另外配置环境变量。

  • 通过source命令引入环境变量,如 source /etc/profile
  • 通过export命令修改需要声明的环境变量, 如export PATH=/usr/local/bin:$PATH

7. crontab中的输出配置
crontab中经常配置运行脚本输出为 >/dev/null 2>&1,来避免crontab运行中有内容输出。
shell命令的结果可以通过‘> ’的形式来定义输出, /dev/null 代表空设备文件。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值