crond不执行原因分析【必须检查的几个地方,详见文章内容】
2015-06-04 12:13
246 查看
文章来源:http://blog.csdn.net/doc_sgl/article/details/41653641
自己写了个脚本,让crond来周期性执行脚本进行备份,但是在crontab -e里面加入了执行脚本之后,发现没有执行,后来分析了一下,crond不执行的原因主要有以下几个方面:
1、crond服务没启动
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
2、用户没有执行crond的权限
/etc/cron.deny文件用来控制哪些用户不能执行crond服务的功能。
可以将自己从文件中删去,或者联系root
3、crontab不提供所执行用户的环境变量
解决方法:在脚本中加入下面这一行:
. /etc/profile
4、没有使用绝对路径
这里的绝对路径包括脚本中的路径和crond命令中的路径两个方面。
5、如果上面都没有解决问题的话可以再找找问题:
1)去邮件看看,在这个过程中用户应该会收到邮件,比如收到这样的提示:
You have mail in /var/spool/mail/root
去看看里面就有crond的内容
2)在脚本里面加入output用来调试
可以在crontab的脚本里面添加个echo $PATH > /tmp/test.log
对比和终端下执行脚本的echo $PATH
自己实际遇到的问题:
机器环境:
root用户没有执行hadoop dfs -rmr /tmp 的权限
child用户有hadoop集群的全部权限
易错一:
在vi /etc/crontab中内容如下:【正解:有的机器中没有HOME=/,这样会导致找不到家目录】
易错二:
由于自己写的shell中需要使用系统环境变量,所以脚本中必须添加 . /etc/profile:
易错三:虽然自己的脚本正确,可是邮件没有发出去,误以为定时任务执行失败!可以改成这样子进行测试定时任务服务crond是否可用!
crontab -e【添加定时任务;备注:crontab -u 用户名 -e只用root用户有此权限】
20 9 * * * echo $PATH > /tmp/test.log【每天的9点20分执行此任务】
最后,综合自己的机器环境,把定时任务写到了【非root用户】下面了,因为本机的root操作hadoop集群的权限有限!
即在非root用户下,crontab -e
=========================================================================================
验证下面的定时任务结果:
19 17 * * * /etc/test.sh 这样可以执行
18 17 * * * sh /etc/test.sh 错误
19 17 * * * root /etc/test.sh 错误
自己写了个脚本,让crond来周期性执行脚本进行备份,但是在crontab -e里面加入了执行脚本之后,发现没有执行,后来分析了一下,crond不执行的原因主要有以下几个方面:
1、crond服务没启动
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
2、用户没有执行crond的权限
/etc/cron.deny文件用来控制哪些用户不能执行crond服务的功能。
可以将自己从文件中删去,或者联系root
3、crontab不提供所执行用户的环境变量
解决方法:在脚本中加入下面这一行:
. /etc/profile
4、没有使用绝对路径
这里的绝对路径包括脚本中的路径和crond命令中的路径两个方面。
5、如果上面都没有解决问题的话可以再找找问题:
1)去邮件看看,在这个过程中用户应该会收到邮件,比如收到这样的提示:
You have mail in /var/spool/mail/root
去看看里面就有crond的内容
2)在脚本里面加入output用来调试
可以在crontab的脚本里面添加个echo $PATH > /tmp/test.log
对比和终端下执行脚本的echo $PATH
自己实际遇到的问题:
机器环境:
root用户没有执行hadoop dfs -rmr /tmp 的权限
child用户有hadoop集群的全部权限
易错一:
在vi /etc/crontab中内容如下:【正解:有的机器中没有HOME=/,这样会导致找不到家目录】
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
易错二:
由于自己写的shell中需要使用系统环境变量,所以脚本中必须添加 . /etc/profile:
#!/bin/bash . /etc/profile ......
易错三:虽然自己的脚本正确,可是邮件没有发出去,误以为定时任务执行失败!可以改成这样子进行测试定时任务服务crond是否可用!
crontab -e【添加定时任务;备注:crontab -u 用户名 -e只用root用户有此权限】
20 9 * * * echo $PATH > /tmp/test.log【每天的9点20分执行此任务】
最后,综合自己的机器环境,把定时任务写到了【非root用户】下面了,因为本机的root操作hadoop集群的权限有限!
即在非root用户下,crontab -e
=========================================================================================
验证下面的定时任务结果:
19 17 * * * /etc/test.sh 这样可以执行
18 17 * * * sh /etc/test.sh 错误
19 17 * * * root /etc/test.sh 错误
相关文章推荐
- oracle存储过程中is和as区别
- frame\center\bounds的区别
- Android Studio学习笔记
- Is-is简单实验走一波
- 不允许直接修改对象的结构体属性的成员
- VSS使用手册
- Step into Gradle - 02 - Project 和 Task
- Java中的访问权限的理解
- 开始刷leetcode day31:Single Number
- PHP函数的实现原理及性能分析
- 按钮
- BFPRT算法Python实现
- 用GDB调试程序(一)
- WCF(一) 简单的认知
- (C语言-数据结构与算法)还原二叉树
- 【关注图像采集视频传输】之 Cy3014 usb3.0 FIFO接口
- find用法
- Python中函数的参数定义和可变参数用法实例分析
- 实战-----使用crond 在linux中定时执行任务
- equals和==