计划任务管理

    Linux系统计划任务有两种:A、一次性任务;B、定时循环任务。

    一次性任务:at命令。at的安装包名字就是at,可以使用命令"yum install at"进行安装.安装完成后,启用atd服务就可以运行at命令了.运行格式为:at [option] TIME

    OPTION:

      -V 显示版本信息:
      -l:
列出指定队列中等待运行的作业;相当于atq
      -d:
删除指定的作业;相当于atrm
      -c:
查看具体作业任务
      -f /path/from/somefile:从指定的文件中读取任务(要执行的命令)
      -m:当任务被完成之后,将给用户发送邮件,即使没有标准输出
       注意:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户

    TIME:定义出什么时候进行 at 这项任务的时间
      HH:MM [YYYY-mm-dd]
      noon, midnight, teatime
4pmtomorrow
      now+#{minutes,hours,days, OR weeks}

      HH:MM 02:00
    在今日的 HH:MM 进行,若该时刻已过,则明天此时执行任务
       HH:MM YYYY-MM-DD 04:00 2016-09-20
    规定在某年某月的某一天的特殊时刻进行该项任务
      HH:MM[am|pm] [Month] [Date]
       04pm March 17
       17:20 tomorrow
    HH:MM[am|pm] + number [minutes|hours|days|weeks]
    在某个时间点再加几个时间后才进行该项任务
       now + 5 minutes
       04pm + 3 days

    注意:选项-t也可以指定时间:at -t TIME。其格式为[[CC]YY]MMDDhhmm。

    at队列存放在/var/spool/at目录中.创建一个计划任务,2分钟后发一个广播:

blob.png

    at命令可以通过修改配置文件来指定用户有权限或者没有权限执行。配置文件为/etc/at.deny和/etc/at.allow。其中,at.allow中的用户被允许执行at命令,at.deny文件中的用户没有权限执行at命令。两个文件如果都不存在,则只有管理员才能执行at命令。如果两个文件都有,at.allow的优先级高。 

    

     定时循环任务:crontab命令,运行格式为:crontab [-u user] [-l | -r | -e]

      -l:列出当前的计划任务列表

      -r:删除当前计划任务

      -e:创建或者编辑计划任务

    使用命令"crontab -e"编辑计划任务,编辑的格式为:

blob.png

    总共7个字段:分、小时、天、月、星期、用户、命令。例如要在每个月的第一天执行一个计划任务,可以使用"crontab -e"编辑如下字段:"* * 1 * *  reboot"。然后保存。其中,"*"代表任何时刻(天,小时,分钟,月),也可以指定具体的时间,连续的时间用"-"连接(1-10),离散的数用","隔开(1,4,10),也可以使用"/#"表示每#(分钟,小时,月,天)执行一次。时间也可以使用特殊的形式:

    @reboot Run once after reboot.
    @yearly 0 0 1 1 *
    @annually 0 0 1 1 *
    @monthly 0 0 1 * *
    @weekly 0 0 * * 0
    @daily 0 0 * * *
    @hourly 0 * * * *

    编辑完成后就可以使用命令"crontab -l"命令查看:

blob.png

    该命令是让每月的第一天重启系统。当用户使用 crontab 创建工作后,该项工作会被到/var/spool/cron/里面,而且是以账号最为判别的,crontab执行的每一项工作都会被记录到 

/var/log/cron 这个日志文件中。

blob.png

     /etc/crontab这个文件是系统默认会定时执行的系统任务,crond服务会每隔一分钟读取/etc/crontab与/varspool/cron里面的内容。文件内容如下:

blob.png

          SHELL=/bin/bash:使用的shell,

         PATH=……:定义路径到变量。

         MAILTO=root:若有额外STDOUT,以 email 将数据发送给谁,可以改成你的email地址,以便接收任务的执行信息。

其中比crontab -e 命令多了一项,便是用户名称了,因为用户执行命令会以用户身份生成配置文件,而这个文件中若是填入任务的话,系统就需要指定用户的身份了。

并且其中还支持以目录来规划任务,可以将可执行文件放在一个目录中,然后再命令处填写 run-parts(有空格)然后接上目录,即可借助run-parts这个脚本的辅助,来规划目录执行了。

其中所有的输出会以email形式,发送预设的账号,所以不必要的输出可以重定向给/dev/null 避免垃圾邮件。

其中日、月、周不可同时存在,若是同时存在,系统默认执行第一个读取到的时间做循环。

  crontab的任务都是定时循环执行,若是那个时刻处于关机状态,那么任务就无法执行了,为了弥补这个问题,就有了anacron。其能够将为能运行的crontab工作在开机之后执行。

aracron也是基于crontab来运行的,因此aracron运行的时间通常有两个,一个是系统开机期间运行,一个是写入crontab 的调度之中,这样才能够在特定的时间分析系统中未运行的crontab 工作。

blob.png

           RANDOM_DELAY=45表示启动后延时时间;

           START_HOURS_RANGE=3-22表示执行的时间段

           下面的字段分别表示执行的次数、执行的延时、作业标识符、命令

           和at命令相似,它也有两个配置文件cron.deny和cron.allow,作用一样。

原创文章,作者:王更生,如若转载,请注明出处:http://www.178linux.com/61038

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code