Linux的任务调度 at / cron (crontab | anacron)

最近由于任务需要,博主又研究了下Linux的任务调度机制。


主要参考 《鸟哥的私房菜》


Linux的任务调度机制主要分为两种:

1. 执行一次:将在某个特定的时间执行的任务调度 at 

2. 执行多次: 多次执行 crontab

3.关机后恢复尚未执行的crontab,  anacron程序


服务:

at

crontab    =>  service: crond


由于Cron是Linux的内置服务,可以用以下的方法启动.关闭这个服务:
/sbin/service crond start           //启动服务
/sbin/service crond stop            //关闭服务
/sbin/service crond restart        //重启服务
/sbin/service crond reload         //重新载入配置


=============================================

执行一次  at


权限控制

/etc/at.allow 写在这个文件中的用户才能使用at,没在这个文件中的用户不能使用at,(即使没有写在at.deny当中)

/etc/at.deny 写在这个at.deny的用户不能使用at, 不在at.deny中的用户可以使用at.

先后顺序:/etc/at.allow 不存在,就寻找 /etc/at.deny 这个文件

一个账号在文件中写一行



at [-mldv] TIME


参数:

-l: at -l 相当于atq, 列出目前系统上面的所有用户的 at 调度。

-d: at -d 相当于atrm, 可以取消一个在at调度中的工作。

-v: 可以使用较明显的数据格式列出at 调度中的任务列表

-c: 可以列出后面接的该项工作的实际命令内容。

-m: 当at的工作完成后,即使没有输出信息,以email 通知用户该工作已完成。


TIME: 时间个格式,定义什么时候执行at, 格式

HH:MM

在今天的 HH:MM 执行。超过该时刻,在明天的HH:MM 进行此工作。

HH:MM YYYY-MM-DD

示例: 04:00 2016-10-26

强制规定在某年末月的某一天的特殊时刻进行该工作。

HH:MM[am|pm] [Month] [Date]

强制在某月某日的某时刻进行该工作。

HH:MM[am|pm] + number [minutes | hours | days | weeks]

示例:

now + 5 minutes

04pm + 3 days



示例:


创建一个定时任务

at now + 2 minutes (按ENTER进入at编辑模式)

at> echo "bad idea" >> /usr/local/tmp/message.txt

at> (按ctrl+d 退出编辑)




通过jobid 查看刚才的job的详细信息

at -c 4

Linux的任务调度 at / cron (crontab | anacron)_第1张图片

Linux的任务调度 at / cron (crontab | anacron)_第2张图片



两分钟后打开 /usr/local/tmp/message.txt 

查看文件确实新增了信息:

vim /usr/local/tmp/message.txt 

Linux的任务调度 at / cron (crontab | anacron)_第3张图片



at -l 

#列出还未执行的at 任务

Tips: 已被执行的不会被列出



at -d number

删除未被执行的任务调度





=================================================================



执行多次 crontab


权限控制

/etc/cron.allow

 不在这个文件内的用户不能使用crontab

/etc/cron.deny

 将不可以使用crontab的账号写入其中。

优先级:

 /etc/crow.allow 大于 /etc/crow.deny


命令

crontab [-u usrname] [-l | -e | -r]

参数:

-u: 只有root 才能执行这个任务,也即帮其他用户新建/删除 crontab 工作调度

-e: 编辑crontab 的工作内容

-l : 查阅crontab的工作内容

-r: 删除所有的crontab的工作内容,若仅要删除一项,请用 -e 去编辑


crontab -e 中一行就代表一项任务,每个任务都有6个字段,6个字段的含义如下:

分钟      小时       日期       月份       周      命令

0-59      0-23        1-31       1-12       0-7      将运行的命令


另外还有一些辅助字符可以帮助设置

*(星号)  :    代表任何时刻都接受的意思。 日,月,周都是* , 代表不论 *月,*日都执行后续命令。


,(逗号):    代表分割时段的意思。3:00 与 6:00 执行。命令为    0 3,6 * * * command


-  (减号)  :     代表一段时间范围内,举例来说,9点到12点之间的每小时的20分执行的任务

                     20  9-12 * * * command    

                     9-12 代表了9,10,11,12


/n (斜线) :     /n代表数字,即每隔 n单位间隔 的意思。例如每5分钟执行一次,则:

                    */5 * * * * command 

        意思与 0-59/5 意思相同



crontab 的转义:

"%"在Cron文件中,有"结束命令行","换行","重定向"的作用,假如不需要"%"的特殊作用,需要使用转义符转义

示例:

00 08 * * * /bin/bash /data/sh/change_partition.sh  +3  ADD /data/sh/v4_new.cfg >>/data/logs/change_partition/new_`date \+\%Y\%m\%d`.log 2>&1


`date \+\%Y\%m\%d`


补充:

除了使用 crontab -e 去编辑外   也可以直接编辑 /etc/crontab  , 两者等同


打开 /etc/crontab 进行查看一下 

Linux的任务调度 at / cron (crontab | anacron)_第4张图片


MAILTO=    //有STDOUT/STDERR, 屏幕上的信息发送给谁

PATH=      //可执行文件的查找路径




设置 crontab 需要注意的一些事情

周与日,月 不可同时并存

可以分别以周或者日,月 为单位循环,但是不能使用 “几月几日为星期几”的模式



示例:

查询指定用户下的crontab 



crontab -e 编写一个定时任务:

Linux的任务调度 at / cron (crontab | anacron)_第5张图片



================================================


anacron

用于恢复执行未执行的任务




额外参考文章:

源地址 :http://www.jb51.net/LINUXjishu/19905.html 源地址 :http://www.jb51.net/LINUXjishu/19905.html



你可能感兴趣的:(Linux)