Linux计划任务(at batch crontab anacron)

未来只做一次 at (依赖于atd服务)

未来周期性做 cron (依赖于crond服务)

cron补充(开机后执行) anacron (依赖于anacron服务)

at

at 命令被用来在指定时间内调度一次性的任务。

at [-mldv] TIME
选项与参数:

-m :当at的任务完成后,即使没有输出信息,也以 email 通知给使用者
-l :列出目前系统上面的所有该使用者的at任务(同atq)
-d :可以取消一个在 at 任务(同atrm)
-v :可以使用较明显的时间格式列出 at 任务
-c :可以列出后面接的该项任务的内容

at命令的时间格式:

now + 时间 :时间以 minutes、hours、days、或 weeks 为单位
HH:MM    :24小时制度,如果时间已过,就会在第二天的这一时间执行
midnight :表示00:00
noon     :表示12:00
teatime  :表示16:00

例子

//定义一个at任务在13:10执行
[root@rhel6 ~]# at 13:10 
at> date >> /tmp/at
at> echo "at command test" >> /tmp/at
at> uname -r >> /tmp/at
at> //另选一行按Ctrl+D退出at命令模式
job 1 at 2012-12-28 13:10

//再定义一个at任务在1分钟后执行
[root@rhel6 ~]# at now + 1 minutes 
at> date >> /tmp/at
at> echo "at command test again" >> /tmp/at
at> sleep 10
at> date >> /tmp/at
at> 
job 2 at 2012-12-28 13:10

[root@rhel6 ~]# date
Fri Dec 28 13:09:09 CST 2012
[root@rhel6 ~]# atq //显示系统中所有的at任务
2 2012-12-28 13:10 a root
1 2012-12-28 13:10 a root
[root@rhel6 ~]# cat /tmp/at
Fri Dec 28 13:10:00 CST 2012
Fri Dec 28 13:10:00 CST 2012
at command test
at command test again
2.6.32-220.el6.x86_64
Fri Dec 28 13:10:10 CST 2012 //对比两个时间可见at任务是按顺序执行命令的

补充:batch

batch 命令被用来在系统平均负载达到 0.8% 以下时执行一次性的任务,用法与at一样

//在00:00之后系统平均负载达到0.8%以下的时候执行
[root@rhel6 ~]# batch midnight 
at> sync
at> sync
at> shutdown -h now
at> 
job 3 at 2012-12-28 13:20
[root@www ~]# atq
3 2012-12-28 13:20 b root
[root@www ~]# atrm 3 //取消batch任务

/etc/at.allow 和 /etc/at.deny 文件可用来限制对 at 和 batch 命令的使用(root用户不受其控制)。这两个使用控制文件的格式都是每行一个用户(不允许空格),且文件修改后,atd守护进程不需重启。
如果at.allow文件存在,那么只有其中列出的用户才被允许使用at或batch命令,且忽略cron.deny文件。如果at.allow文件不存在,那么所有在cron.deny中列出的用户都将禁止使用at和batch。

cron

crond是Linux下用来周期性地执行某种任务或等待处理某些事件的一个守护进程,且修改任务或控制文件后不用重启。
当完成操作系统的安装后,默认会安装crond,并自动启动crond进程。crond进程每分钟会定期检查是否有要执行的任务。
其中/etc/cron.allow和/etc/cron.deny文件用来现在cron的使用。这两个文件的格式都是每行一个用户(不允许空格),但root用户不受其限制。
cron.allow、cron.deny规则与at命令控制文件相同

Linux下的任务调度分为两类:系统任务调度和用户任务调度

扫描二维码关注公众号,回复: 2545276 查看本文章
  • 用户任务调度:用户定期要执行的工作。通过crontab命令定制。所有用户定义的crontab文件都保存在/var/sopl/cron目录中(文件名与用户名一致)
  • 系统任务调度:系统周期行所要执行的任务。通过/etc/crontab配置

crontab文件格式:
minute hour day month week command
0-59 0-23 1-31 1-12 0-7
另外”*”表示所有可能的值,”,”表示某个间隔时段,”-“表示某个连续时段,”/n”表示每隔n个单位时间

0  */3  *   *  *    //表示每隔3个小时
30  3   *   *  6    //表示每周6的3:30
0   0  1,20 *  *    //表示每个月的1号和20号
10  5  */5  *  *    //表示每个月的5、10、15、20、25、30号的5:10

用户任务调度:

crontab [-u user] [file]
crontab [-u user] [-e | -l | -r | -i]
-u user :用来设定某个用户的crontab任务
-e :编辑某个用户的crontab任务(如果是由系统执行的crontab任务可之间编辑/etc/crontab文件)
-l :显示某个用户的crontab任务
-r :删除某个用户的所有crontab任务(从/var/spool/cron目录中删除该用户的crontab文件)
-i :在删除用户的crontab文件时给确认提示
每次编辑完某个用户的cron设置后,cron会自动在/var/spool/cron/目录下生成一个与用户同名的文件记录该用户的cron信息

 //创建crontab任务,要求每分钟向/tmp/crontab输入当前时间的信息
[root@rhel6 ~]# ll /var/spool/cron/ | grep root
[root@rhel6 ~]# crontab -e
* * * * * date >> /tmp/crontab 
//注:单纯date的话将看不到任何输出,因为cron把任何输出都mail到root用户了

[root@rhel6 ~]# crontab -l
* * * * * date >> /tmp/crontab
[root@rhel6 ~]# ls /var/spool/cron/ | grep root
-rw-------. 1 root root 28 Dec 27 17:15 root

[root@rhel6 ~]# cat /tmp/crontab
Thu Dec 27 17:16:01 CST 2012 
Thu Dec 27 17:17:01 CST 2012
Thu Dec 27 17:18:01 CST 2012
Thu Dec 27 17:19:01 CST 2012
Thu Dec 27 17:20:01 CST 2012

//删除用户的所有crontab任务
[root@rhel6 ~]# crontab -r 
[root@rhel6 ~]# crontab -l
no crontab for root
//同时从/var/spool/cron目录中删除该用户的crontab文件
[root@rhel6 ~]# ll /var/spool/cron/ | grep root 

系统任务调度:

可通过直接编辑/etc/crontab文件进行计划任务的管理,该文件与”crontab -e” 的内容几乎完全一模一样。

[root@rhel6 ~]# cat /etc/crontab
SHELL=/bin/bash                 //执行任务所使用的shell类型
PATH=/sbin:/bin:/usr/sbin:/usr/bin //执行任务所使用的PATH
MAILTO=root     //若有标准(错误)输出信息,则mail给root
HOME=/          //shell所在的家目录

# * * * * * user-name command to be executed
# run-parts
01 * * * * root run-parts /etc/cron.hourly //每小时01分以root身份执行/etc/cron.hourly/目录下的脚本
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

anacron

cron 是作为守护进程运行的,而anacron则作为普通进程运行并终止的。
anacron只是cron的补充而非是完全替代 cron。
anacron 维护了一组应当运行的任务,每个任务都一个相关的运行间隔。
anacron 并不能指定何时运行某项任务, 而是以天为单位或者是在启动后立刻进行 anacron 的动作,
当系统启动之后anacrod将会去侦测停机期间应该进行但是并没有进行的 crontab 任务,并将该任务运行一遍后,然后 anacron 就会自动停止了。
因此 anacron 运行的时间通常有两个,一个是系统启动期间运行,一个是写入 crontab 中的任务。

[root@rhel6 ~]# cat /etc/anacrontab
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#天数 延迟时间 任务名称定义 执行的指令
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
#由 /etc/anacrontab 分析到 cron.daily 这项工作名称的天数为 1 天;
#由 /var/spool/anacron/cron.daily 取出最近一次运行 anacron 的时间戳记;
#由时间戳与目前的时间比较,若间隔天数为 1 天(以上),将延迟5分钟后执行"nice run-parts /etc/cron.daily"这条命令,且运行完毕后anacron程序结束
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly

出处

http://www.linuxdiyf.com/viewarticle.php?id=418205

猜你喜欢

转载自blog.csdn.net/GodsLeft/article/details/51143861