一,crond 任务调度
1.1 概述
指定系统在某个时间执行特点的命令或程序。
1.2 任务调度分类
- 系统工作:有些重要的工作需要周而复始的重复执行,如病毒扫描等。
- 用户工作:个别用户可能希望执行某些程序,如mysql数据库的备份。
1.3 语法
crontab 选项
常用选项
| 选项 | 说明 |
|---|---|
| -e | 编辑crontab定时任务 |
| -l | 查询crontab任务 |
| -r | 删除当前用户的所有crontab任务 |
用法举例:将其写入到 crond 任务调度中,每一分钟执行一次
*/1**** ls -l /etc/ > tmp/to.txt #将etc目录的列表信息传入to.txt中
5 个占位符号的说明:分--时--天--月--周
用法举例
| 项目 | 含义 | 范围 |
|---|---|---|
| 第一个* | 一小时中第几分钟 | 0-59 |
| 第二个* | 一天中第几小时 | 0-23 |
| 第三个* | 一月中第天 | 1-31 |
| 第四个* | 一年中第几个月 | 1-12 |
| 第五个* | 一周中的星期几 | 0-7(0和7都代表星期天) |
特殊符号的说明
| 特殊符号 | 含义 |
|---|---|
| * | 代表任何时间,比如第一个*就代表一小时中每分钟都执行依次的意思 |
| , | 代表不连续的时间,比如"0 8,12,16 * * *",就代表在每天的8点0分,12点0分,16点0分都执行依次 |
| - | 代表连续的时间范围,比如"0 5 * * 1-6"就代表周一到周六的5点执行 |
| */n | 代表每个多久执行依次,比如"*/10 * * * *"代表每隔10分钟执行 |
特殊时间执行任务案例
| 时间 | 含义 |
|---|---|
| 45 22 * * * | 每天的22点45分执行命令 |
| 0 17 * * 1 | 每周一17点0分执行命令 |
| 0 5 1,15 * * | 每月1到15号的5点0分执行命令 |
| 40 4 * * 1-5 | 每周1到中午的4点40分执行命令 |
| */10 4 * * * | 每天4点每隔10分钟执行一次命令 |
| 0 0 1,15 * 1 | 每个月的1号到15号,每周1的0点0分执行命令 |
星期几和几号最好不要同时出现!容易混乱。
一般的我们把要执行的指令写到 xxx.sh 脚本文件中,在 crontab 中定时执行即可,注意记得给执行权限!
重启任务调度
service crond restart
二,at定时任务
2.1 基本介绍
- at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行。
- 默认情况下,atd守护进程每60s检查作业队列,有作业时会检查作业运行时间,如果时间与当前时间匹配就运行。
- at命令是一次性定时计划任务,执行完一次任务后不再执行
- 在使用at命令的时候,务必保障atd进程的启动!
atd 会 60s 一次对一个任务队列进行检测,如果条件符合就出队执行,否则就检测下一个
检测当前运行的进程
ps -ef
检查 atd 进程是否启动
ps -ef | grep atd
2.2 at命令语法
at 选项 时间
ctrl + D 结束 at 命令的输入
常用选项
| 选项 | 含义 |
|---|---|
| -m | 当指定的任务被完成后,将给用户发送邮件,即使没有标准输出 |
| -M | 不发送邮件 |
| -I | atq的别名 |
| -d | atrm的别名 |
| -v | 显示任务将被执行的时间 |
| -c | 打印任务的内容到标准输出 |
| -V | 显示版本信息 |
| -q<队列> | 使用指定队列 |
| -f<文件> | 从指定文件读入任务而不是从标准输入中读入 |
| -t<时间参数> | 以时间参数的形式提交要运行的任务 |
2.3 at时间定义
-
接受在当天的
hh:mm(小时: 分钟) 式的时间指定。假如改时间过去了就放到第二天执行。比如 04:00 -
使用
midnight(深夜),noon(中午),teatime(下午茶时间,一般为下午 4 点) 等比较模糊的词来指定时间 -
采用 12 小时计时制,即在时间后面加上
am(上午), 或pm(下午),比如 12:pm -
指定命令执行的具体时间,指定格式为
month day(月 日) 或者mm/dd/yy(月 / 日 / 年) 或者dd.mm.yy(日. 月. 年)日期必须跟在时间后面,如
04:00 2021-03-1 -
使用相对计时法,指定格式为 now+count time-untis
now就是当前时间,time-untis是时间单位,这里可以为minutes(分钟)hours(小时)days(天)weeks(星期)count(是时间数量)如几天,几小时等 如 now+ 5 minutes,五分钟后。
-
直接使用
today(今天),tomorrow(明天) 来指定完成命令时间。
查看系统中未执行的任务
atq
删除已经设置的任务
atrm 任务编号
对于 at -q 命令
-q 选项后面跟上队列名称将使用指定的队列执行 at 任务
at -q队列等级 时间
-
队列名称只包含一个字母,有效的队列名称取值范围是:小写字母 a-z 或大写字母 A-Z
-
在默认情况下 a 队列作为 at 命令的默认队列,b 队列作为 batch 命令的默认队列
-
越大的字母在执行时拥有越高的优先级
-
如果在创建 at 计划任务是使用大写字母指定任务的队列,该任务在执行的时候将被当做batch 计划任务处理
batch:在系统负荷允许的情况下执行 at 任务,换言之,就是在系统空闲的情况下才执行 at 任务
对于 at -f 命令
-f 选项后面加上文件路径即可
at -f文件路径 时间