最近由于任务需要,博主又研究了下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>
通过jobid 查看刚才的job的详细信息
at -c 4
两分钟后打开 /usr/local/tmp/message.txt
查看文件确实新增了信息:
vim /usr/local/tmp/message.txt
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 进行查看一下
MAILTO= //有STDOUT/STDERR, 屏幕上的信息发送给谁
PATH= //可执行文件的查找路径
设置 crontab 需要注意的一些事情
周与日,月 不可同时并存
可以分别以周或者日,月 为单位循环,但是不能使用 “几月几日为星期几”的模式
示例:
查询指定用户下的crontab
crontab -e 编写一个定时任务:
================================================
anacron
用于恢复执行未执行的任务
额外参考文章:
源地址 :http://www.jb51.net/LINUXjishu/19905.html 源地址 :http://www.jb51.net/LINUXjishu/19905.html