我们将系统执行的任务写成脚本,但我们并不想立即执行,而是安排在未来的某个时间运行,这种机制称为任务计划,我们把执行任务计划分为了两种,下面我们就小谈一下;

一、在未来的某个时间点执行一次某任务,可以使用at,batch命令:
1、at命令:
格式:at 时间    ---此处的时间必须是未来的时间,输入之后会给出一个at提示符
at>COMMAND   ----在at提示符下输入要执行的命令,可以写多个命令
at>Ctrl+d    ----在某个时间设置要执行的任务后使用Ctrl+d,来提交任务
指定时间方法:
    绝对时间:HH:MM   DD.MM.YY  MM/DD/YY
    相对时间:now+#  单位:minues, hours,  days,  weeks
    模糊时间:noon【上午12点】, midnight【午夜12点】, teatime【俗称下午茶时间,相当于下午4点】
补充:命令的执行结果将以邮件的形式发送给安排任务的用户

  1. -----------------------------------------------------------  
  2. 给系统指定一个任务计划让其在1分钟后执行  
  3. [root@localhost ~]# at now+1minutes  
  4. at> ls /var  
  5. at> cat /etc/fstab    
  6. at> <EOT>  
  7. job 1 at 2013-03-30 23:41   
  8. ------------------------------------------------------------- 

at命令常使用的两个选项:       
at -l :查看执行作业的状况,相当于atq
at -d  作业号 = atrm  作业号:结束某个作业

  1. ------------------------------------------------------------------------  
  2. [root@localhost ~]# at -l  
  3. 1      2013-03-30 23:41    a    root      
  4. --第一个字段表示有几个作业  
  5. --第二个字段表示作业执行时间  
  6. --第三个字段表示作业队列,作业类别不同队列名也可以不同,默认是a  
  7. --第四个字段表示哪个用户发起的作业  
  8. [root@localhost ~]# at -d   1  
  9. --表示不让系统执行刚制定的任务计划  
  10. ------------------------------------------------------------------------- 

还有一种情况就是不同用户同时让系统指定任务计划,系统就不知道要执行哪个用户的任务计划,我们可以使用下面两个文件控制用户的使用:
/etc/at.deny【如果用户在此文件中表示在这个文件中的所有用户都不能使用at命令,相当于黑名单】
/etc/at.allow【如果用户在此文件中表示在这个文件中的所有用户都能使用at命令,相当于白名单】
注:如果两个文件都存在,默认执行/etc/at.allow文件;
      如果两个文件都不存在,系统将允许root用户使用at命令
2、batch是不需要指定时间,自动选择系统较空闲的时刻执行任务,其它使用格式与at命令相同,这里我就不做多介绍了。
二、周期性地执行某任务,可以使用cron命令:
cron:自身是一个不间断运行的服务,前提是cron要运行在一个长期不会关机的服务器上
cron分为系统cron任务与用户cron任务;

1、时间通配表示:
*:对应时间的所有有效取值;
,:离散时间点;
10,40,* * * *【每个小时的第10分钟和第40分钟各执行一次】
-:连续时间点
10 02 * * 1-5【每周一和周五的10点02分执行一次】
/ #:对应取值范围内每多久一次
*/3 * * * *【每3分钟执行一次】
2、时间的有效取值:
 分钟   小时    天     月     周
[0-59] [0-23] [1-31] [1-12] [0-7,0和7都表示周日]

3、系统cron任务都定义在/etc/crontab下
/etc/crontab配置文件内容:

  1. ------------------------------------------------------------------------  
  2. SHELL=/bin/bash      ---定义哪一个为命令解释器  
  3. PATH=/sbin:/bin:/usr/sbin:/usr/bin  
  4. MAILTO=root  
  5. HOME=/  
  6. # run-parts  
  7. 系统cron运行的格式:  
  8. 分钟 小时 天 月 周  用户  任务  
  9. 01    *   *  *  *  root run-parts /etc/cron.hourly   
  10. --每小时的第一分钟以root身份执行/etc/cron.hourly目录下的内容  
  11. 声明:run-parts是红帽提供的脚本,能够实现指定目录下的每一个脚本   
  12. 02    4   *  *  *  root run-parts /etc/cron.daily  
  13. --每天凌晨4点02分以root身份执行/etc/cron.daily目录下的内容  
  14. 22    4   *  *  0  root run-parts /etc/cron.weekly  
  15. --每周日的4点22分以root身份执行/etc/cron.weekly目录下的内容  
  16. 42    4   1  *  *  root run-parts /etc/cron.monthly  
  17. --每月第一天的4点42分以root身份执行/etc/cron.monthly目录下的内容  
  18. 我们还可以使用ls命令查看上面目录中的内容,里面都是一些可执行的脚本;  
  19. ------------------------------------------------------------------------- 

4、用户cron任务都定义在/var/spool/cron/USERNAME,此处的用户名是可以自己定义的,由于用户cron不需要指定用户,所以比系统cron少了用户一项;
在对用户cron编辑时,通常不要直接使用vim编辑,vim不会提醒定义的语法错误,下面可以使用专门管理用户cron的命令crontab:
crontab:定义用户的周期任务
    -l:列出当前用户的所有cron计划内容
    -r:移除所有任务内容
    -e:编辑计划内容
以上的三个参数直接操作的是作用于当前执行“crontab"命令的用户,如:
#crontab -e       ---编写周期执行的任务,保存之后会在/var/spool/cron/下生成一个和用户名同名的文件
#crontab -u redhat -e     ---保存结束后,文件的名字将自动命名为redhat
注意:所有的任务会按照预订的周期运行,其前提必须是服务器处于开机运行状态。

上面cron任务最终执行结果将以邮件形式发送给管理员; 
例:*/3 * * * * /bin/cat /etc/fstab > /dev/null  --表示把执行的正确信息送给/dev/null中去 
      */3 * * * * /bin/cat /etc/fstab &> /dev/null --表示执行的结果无论对或错都会送到/dev/null中去
补充:cron执行所有命令都去PATH环境变量指定的路径下去找,如果写的命令放在其他位置,以用户的身份可以正常运行,不能以cron正常运行;因此在cron当中执行命令使用绝对路径;如果执行脚本时没有相对应的路径,可以自己在脚本中定义环境变量   
三、anacron命令
anacron是cron的补充,能够实现让cron因为各种原因在过去的时间该执行而未执行的任务在恢复正常执行一次;一般在系统上是不会启用的。
其配置文件位置在/etc/anacrontab,内容含义:

  1. -----------------------------------------------------------------------------------  
  2. SHELL=/bin/sh                ----指定解释器为bash  
  3. PATH=/sbin:/bin:/usr/sbin:/usr/bin     ----为任务执行指定环境变量  
  4. MAILTO=root                 ----指定发送邮件的用户      
  5.  
  6. 1       65    cron.daily        run-parts /etc/cron.daily      
  7. 7       70    cron.weekly       run-parts /etc/cron.weekly     
  8. 30      75    cron.monthly      run-parts /etc/cron.monthly    
  9.  
  10. 四个字段含义:  
  11. 时间间隔:执行任务的时间间隔,单位为天  
  12. 等待时间:在时间间隔到期后,如果任务没有顺利执行,则会等待此处设置的时间,然后再次尝试执行  
  13. 任务标识:有关此任务的说明,它可包括任何非空格的字符(/除外),通常都用在anacron信息中或是  
  14. 此任务的时间戳文件名  
  15. 命令:实际执行的任务  
  16. --------------------------------------------------------------------------------- 

当任务完成后,anacron会将此日期记录在/var/spool/anacron目录的timestamp文件中,默认的timestamp文件有三个:cron.daily,cron.monthly和cron.weekly  ,大家可以查看一下,在上面内容中如果有遗漏的地方,希望大家提出来;由于我现在是一个新手,理解的东西还不够透彻,还请大家多多建议。