Linux下的crontab定时执行任务命令详解
Linux中的定时任务crontab
cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业。
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
service crond status //查看服务状态
①/var/spool/cron/ 这个目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名,比如tom建的crontab任务对应的文件就是/var/spool/cron/tom。一般一个用户最多只有一个crontab文件。
②/etc/crontab 这个文件负责安排由系统管理员制定的维护系统以及其他任务的crontab
③/etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。
crontab权限问题到/var/adm/cron/下一看,文件cron.allow和cron.deny是否存在
用法如下:
1、如果两个文件都不存在,则只有root用户才能使用crontab命令。
2、如果cron.allow存在但cron.deny不存在,则只有列在cron.allow文件里的用户才能使用crontab命令,如果root用户也不在里面,则root用户也不能使用crontab。
3、如果cron.allow不存在, cron.deny存在,则只有列在cron.deny文件里面的用户不能使用crontab命令,其它用户都能使用。
4、如果两个文件都存在,则列在cron.allow文件中而且没有列在cron.deny中的用户可以使用crontab,如果两个文件中都有同一个用户,
以cron.allow文件里面是否有该用户为准,如果cron.allow中有该用户,则可以使用crontab命令。
59 23 10 5 2014 /home/root/tesh.sh
#分 时 日 月 年 |<-------命令串------->|
表示2014年5月10日23点59分,执行/home/root下的tesh.sh脚本。
每一个域可出现的字符如下:
Minutes:可出现", - * /"四个字符,有效范围为0-59的整数
Hours:可出现", - * /"四个字符,有效范围为0-23的整数
DayofMonth:可出现", - * / ? L W C"八个字符,有效范围为1-31的整数
Month:可出现", - * /"四个字符,有效范围为1-12的整数或JAN-DEc
DayofWeek:可出现", - * / ? L C #"四个字符,有效范围为1-7的整数或SUN-SAT两个范围。1表示星期天,2表示星期一, 依次类推
Year:可出现", - * /"四个字符,有效范围为1970-2099年
一种写法就是:将它拆成多条crontab,比如每天2点到0点执行,每天0点到1点执行,每天1点10分到2点执行。三条语句。这种方法的问题就是,如果再来新的要求呢,比如在此基础之上,每天8点到8点10分不能执行,这又怎么处理,写更多的crontab任务吗?
另一种比较好的解决方案是:写一个run.sh脚本,每10分钟执行一次,首先判断当前时间是否是在1点到1点10分之间,如果不是,就执行tesh.sh,如果是,可以sleep10分钟。
第三种非常好的方案就是利用注释。我们可以在1点时,将tesh.sh任务给注释掉,在1点10分,将tesh.sh任务的注释消除。要实现这种想法,需要使用sed命令。可以在crontab里面这样写:
#每隔10分钟执行一次
*/10 * * * * tesh.sh
#每天1点钟,将命令注释掉
0 1 * * * sudo sed -i 's%(*/10 * * * * tesh.sh)%#1%' /var/spool/cron/用户名
#每天1点零10分,将被注释的命令恢复
10 1 * * * sudo sed -i 's%(^##*)(*/10 * * * * tesh.sh)%2%' /var/spool/cron/用户名