在linux下有两种计划任务的计划:只执行一次、周期性执行。


(1)只执行一次,在未来的某个指定时间执行一次
指定的时间格式有:
绝对时间:HH:MM,DD.MM.YY,MM/DD/YY
相对时间:now+数字(minutes,hours,days,weeks)
模糊时间:noon(即12点),midnight(即24点),teatime(即16点)

命令格式:at [选项] [时间]
命令选项:
-m 指定任务完成后,将给用户发送邮件
-l 与atq命令一样
-d 与atrm命令一样
-v 显示任务将被执行的时间
-c 打印任务内容到标准输出
-V 显示版本信息

atd服务必须启动

rhel6 rhel7
#service atd restart #systemctl restart atd.service

1、2分钟后向/tmp/1.txt输入当前时间,

[root@rhel7-01 ~]# at now+2minutes #回车
at> echo `date` >> /tmp/1.txt #回车
at> <EOT>  #写入完命令后按下crtl+d提交任务
job 3 at Thu Mar  8 15:44:00 2018
[root@rhel7-01 ~]# tail -f /tmp/1.txt 
2018年 03月 08日 星期四 15:44:00 CST

2、查看当前at的任务,at -l

[root@rhel7-01 ~]# at now+5minutes
at> echo `date` >> /tmp/1.txt
at> <EOT>
job 4 at Thu Mar  8 15:52:00 2018
[root@rhel7-01 ~]# at -l
4   Thu Mar  8 15:52:00 2018 a root
[root@rhel7-01 ~]#

3、删除任务,at -d jobID 或者 atrm jobID

[root@rhel7-01 ~]# at now+5minutes
at> echo `date` >> /tmp/1.txt
at> <EOT>
job 5 at Thu Mar  8 15:54:00 2018
[root@rhel7-01 ~]# at -l
5   Thu Mar  8 15:54:00 2018 a root
[root@rhel7-01 ~]# at -d 5
[root@rhel7-01 ~]# at -l
[root@rhel7-01 ~]# 

4、系统空闲的时候自动执行任务

[root@rhel7-01 ~]# batch
at> echo "hello" > /dev/pts/1     
at> <EOT>
job 6 at Thu Mar  8 15:55:00 2018
[root@rhel7-01 ~]# hello

[root@rhel7-01 ~]#

at有两个配置文件/etc/at.deny和/etc/at.allow
如果deny单独存在,则是deny文件记录以外的所有用户都可以使用at命令
如果allow单独存在,则是只允许allow内的用户可以使用at命令
如果同时存在,则只允许allow内的用户使用at命令


(2)周期性执行任务
可周期性的在指定时间里重复执行任务

命令格式:crontab [选项] [参数]
命令选项:
-u 指定设置某用户的计划任务,只有root可以设置
-l 列出用户的计划任务
-r 删除某用户的所有计划任务
-e 编辑某用户的所有计划任务


时间格式说明:
Linux基本计划任务
第一个位置表示:分钟(0-59)
第二个位置表示:小时(0-23)
第三个位置表示:日期(1-31)
第四个位置表示:月份(1-12)
第五个位置表示:星期(0-7,0和7均代表星期日)
第六个位置表示:所要执行的命令

时间通配表示:
* 代表当前位置的所有时间点
5 * * * * 每天每小时的05分执行一次
, 离散时间点
10,25,50 * * * * 每天每小时的10分、25分、50分各执行一次
- 连续时间点
30-40 * * * * 每天每小时的30-40分钟之间,每一分钟执行一次
/ 对应取值范围内每隔多少时间执行一次
1 */2 * * * 每隔两小时的01分执行一次


crond任务分为用户计划和系统计划
1、系统计划的配置文件在/etc/crontab文件里
Linux基本计划任务
2、用户计划在/var/spool/cron/username


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命令。


crond服务必须启动

rhel6 rhel7
#service crond restart #systemctl restart crond

示例:

  1. 每小时的09分执行一次
    9 * * * *
  2. 每周3至6的10点、23点分别执行一次
    0 10,23 * * 3-6 或者 0 10,23 * * 3,4,5,6
  3. 每小时的10-30分之间每隔2分钟执行一次
    10-30/2 * * * *
  4. 每天12点09分执行一次
    9 12 * * *
  5. 每周3的12点09分执行一次
    9 12 * * 3
  6. 每月9号12点09分执行一次
    9 12 9 * *
  7. 每年的6、12月的9号12点09分分别执行一次
    9 12 9 6,12 *

思考题

  1. * */2 * * *,代表什么意思?
  2. 0 12 9 * 6,代表什么意思?
  3. crontab -r ,是删除当前用户的所有计划任务,那么如何删除指定的任务呢?

答案

  1. 每隔一小时,每分钟执行一次。
  2. 每月9号且是周六的时候,12点正执行一次(一般比较少日与周同时使用,因为要同时满足条件的概率较低。)
  3. vim编辑/var/spool/cron/username对应用户文件就删除指定任务行就OK拉。