Linux的计划任务

来源:互联网 发布:中山广电网络营业厅 编辑:程序博客网 时间:2024/05/20 18:04

Linux的计划任务

1.at服务是一个一次行执行的任务的工具
1.检查at 是否安装  chkconfig  --list | grep atd
/etc/at.allow,白名单
/etc/at.deny,黑名单。

at +时间,会延期执行。atq,会显示准备执行的命令列表。at -c 命令号,会显示该命令的具体执行过程。
        atrm [工作号]       #删除指定的at任务


2.crontab  是一个用于设置周期性被执行的任务的工具
crontab 周期性执行的任务列表
cront job被周期性执行的任务


1.安装和检查crontab 是否安装  crontab   -l
   检查crond 服务是否开启   service   crond   status   // 大部分服务都是*d 
    
   安装cron  yum   install vixie-cron       
                      yum   install  crontabs

/cron/at.allow,白名单
/cron/at.deny,黑名单。

2.crontab  -e  编辑一个crontab 任务

   */  *  *  * * date > /tmp/log.txt                            //没分钟打印一个日期到/tmp/log.txt

   tail  -f   /tmp/log.txt    动态刷新文件显示


按crrl  + c 停止



3.crontab 的组成

1>crond 系统服务          -----------》每分钟都会从配置文件刷新定时任务

2>配置文件      ------------------》文件方式设置定时任务(要加用户身份)

3>crontab  调整定时任务


分别表示 分钟,小时,日,月,星期(0-6)星期天是0或者7,

4.简单设置:

每晚21.30 重启apache服务

30 21 * * *  service  httpd  restart

每月的 1.10,12 的4.45重启apache

45 4 1,10,12 * service  httpd  restart

每月的1到10号4.45重启apache

45 4 1-10 **service  httpd  restart

没两分钟重启apache

*/2 * * * * service  httpd  restart

晚上11-7 重启apache

0 23-7/1 * * * service  httpd  restart

每天18-23 每隔30分钟重启一次

1-59/30  18-23 * * *   service  httpd  restart


*表示任何时候都匹配可以用A,B,C,表示或A或B或C时执行mingl可以用A-B表示A到B之间时执行命令可以用*/A 表示每A分钟(小时等)执行一次命令

5.crontab使用



6.crontab的配置文件

1》全局配置文件:/etc/crontab

       可以在/etc/crontab 中设置计划任务:直接输入即可:(要加用户身份:命令尽量写绝对路径)

2》var/spool/cron   /root和crontab  -l  中显示的相同。即crontab  -e  修改的是var/spool/cron/root



1)手工执行定时任务2)系统定时任务   -  第一种:把需要定时执行的脚本复制到/etc/cron.{daily,weekly,monthly}目录中的任意一个   -  第二种:修改/etc/crontab配置文件


      7.crontab 的日志var/log/cron

       

8.进入/var/spool/mail可以看到cron以邮件的形式发送给root



9.常见的的错误:

1》命令行双引号使用%没有加\

四月的第一个星期天早晨1.59执行a.sh

错误的: 59 1 1-7 4 0 /root/a.sh  

第三和五域之间 执行的是 “或”操作原来是想这 四月的第一个星期日早晨1时59分运行a.sh59 1 1-7 4 0 /root/a.sh但是实际上 1-7 与 0 是或的 关系,实际上会在4月的1-7日 每天都会执行,并且当星期数为星期七时,也会执行,所以执行次数多达11次。所以应该把星期的判断 放在执行的脚本上。
正确:
59 1 1-7 4 * test `date +\%w` -eq 0 && /root/a.sh
用test判断是否为星期天

2》分钟设置错误

    没两个小时执行一次

    错误: * */2 * * * date         //每分钟都会执行

    正确:  0  */2  * * * * date

9.每半分钟执行一次

配合sleep 

*/1 * * * * sleep 30s ;date



10.anacron:

anacron用来保证在系统关机的时候错过的定时任务,可以在系统开机之后再执行。检测周期:一天、7天、一个月。上次执行cron的时间与当前时间比较,若两个时间的差值超过了anacron的指定时间,证明有cron任务被执行。
CentOS  6.x的区别
在老的CentOS版本中,/etc/cron.{daily,weekly,monthly},这些目录即会被cron调用,也会被anacron调用,容易重复执行
在CentOS 6.x中则只会被anacron调用,避免重复执行
在CentOS 6.x中,anacron不再是服务,而是系统命令
anacron配置文件
vi /etc/anacrontab
RANDOM_DELAY=45 #最大随机延迟
START_HOURS_RANGE=3-22 #anacron执行时间范围
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weeky nice run-parts /etc/weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
上面 1 7 @monthly 表示时间间隔1天 5天 一个月以上
5 25 是强制延迟时间 也就是后面文件强制推迟延迟执行这么多分钟

具体以cron.daily工作过程举例:
首先读取/var/spool/anacron/cron.daily中的上一次anacron执行时间和当前时间比较,
如果两个时间的差值超过1天,就执行cron.daily工作,执行这个工作只能在03:00~22:00之间
执行工作时强制延迟时间为5分钟,再随机延迟0~45分钟的时间
使用nice命令指定默认优先级,使用run-parts脚本执行/etc/cron.daily目录中的所有可执行文件

0 0