一、crond 任务调度
1. 概述
- crontab 进行 定时任务的设置
- 任务调度:系统在某个时间执行的特定的命令或程序
- 任务调度分类:
- 系统工作:如有些重要工作必须周而复始地执行
- 个别用户工作:个别用户可能希望执行某些程序,如对mysql数据库的备份
2. 基本语法
crontab [选项]
3. 常见选项
选项 | 说明 |
---|---|
-e | 编辑crontab定时任务 |
-l | 查询crontab任务 |
-r | 删除当前用户所有的crontab任务 |
4.快速入门
-
设置一个任务调度文件:
/etc/crontab
-
设置个人任务调度。执行:
crontab -e 命令
-
接着输入任务到调度文件:
*/ 1 * * * * ls-l /etc /> /tmp/to.txt.
命令 -
该命令意为:每小时的每分钟执行
ls -l /etc/>/tmp/to.txt
命令 -
注意上诉快速入门中的*/1表示每分钟执行一次
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点0分执行命令 |
*/n | 代表每隔多久执行一次。比如“*/10 * * * * 命令” ,代表每个十分钟就执行一次命令 |
- 特定时间执行任务案例
时间 | 含义 |
---|---|
45 22 * * * | 在22点45分执行命令 |
0 17 * * 1 | 每周一的17点0分执行命令 |
0 5 1,15 * * | 每月1号和15号的早上五点执行命令 |
40 4 * * 1-5 | 每周一到周五早上四点四十分执行命令 |
*/10 4 * * * | 每天早上四点,每隔十分钟hi i选哪个一次命令 |
0 0 1,15 * 1 | 每月1号和15号,每周一的凌晨0点0分都会执行命令 |
注意星期几和几天最好不要同时出现,因为他们定义的都是天 |
二、crond任务调度练习
案例一:每隔一分钟,就将当前的日期信息,追加到/tmp/mydate文件中
*/1 * * * * date >>/tmp/mydate
案例二:每隔一分钟,就将当前日期和日历都追加到/home/mycal文件中
这里注意几点
1.首先我们书写my.sh文件的时候需要修改它的权限,让他拥有可执行(e)的权限
chmod u+x my.sh
2. ./my.sh可以用来执行命令,但是一次需要手动书写该指令
3. 使用crontab -e指令,需要往里面书写命令执行时间,并用:wq执行保存
案例三:每天凌晨2:00将mysql数据库testdb,备份到文件中。提示:指令为mysqldump -u root -p密码 数据库 >> /home/db.bak
1. crontab -e
2. 0 2 * * * mysqldump -u root -proot testdb > /home/db.bak
三、crond其他指令
-
crontab -r
:终止任务调度 -
crontab -l
:列出当前有哪些任务调度 -
service crond restart [重启任务调度]
四、at定时任务
1. 基本介绍
-
at命令是一次性定时计划任务,原理是at的守护进程atd以后台模式运行,检查作业队列来运行。默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业
-
at命令是一次性定时计划任务,执行完一个任务后不再执行此任务
-
使用at命令,一定要保证atd进程的启动,可以使用相关指令来查看
-
ps -ef | grep atd
指令:该指令可以查看atd进程是否启动
2. at命令模式
at[选项][时间]
Ctrl+D
:结束at命令的输入
3.选项列表
选项 | 含义 |
---|---|
-m | 当指定的任务被完成后,将给用户发送邮件,即使没有标准输出 |
-I | atq的别名 |
-d | atrm的别名 |
-v | 显示任务将被执行的时间 |
-c | 打印任务的内容到标准输出 |
-V | 显示版本信息 |
-q<队列> | 使用指定的队列 |
-f<文件> | 从指定文件读入任务 |
-t<时间参数> | 以时间参数的形式提交到运行的任务 |
4.时间的定义
at[选项][时间]
:选项参照上面的表格,时间的定义有如下的定义:
- 接受当前的hh:mm(小时:分钟)式的时间指定。假如当前时间过去,会在第二天执行
- 使用midnight(深夜),noon(中午),teatime(饮茶时间,一般下午4点)等比较模糊的时间指定
- 采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。
- 指定命令执行的具体时间,指定格式为 month day (月日)或 mm / dd / yy (月/日/年)或 dd.mm.yy(日月年),指定的日期必须跟在指定时间的后面。例如:04:00 2021-01-01
- 使用相对计时法。指定格式为: now + count time-units , now 就是当前时间, time-units 是时间单位,这里能够是 minutes (分钟)、 hours (小时)、 days (天)、 weeks (星期)。 count 是时间的数量,几天,几小时。例如: now +5 minutes
- 直接使用 today (今天)、 tomorrow (明天)来指定完成命令的时间。
五、at定时任务练习
案例一:2天后的下午5点执行/bin/ls /home
at 5pm + 2 days
at > /bin/ls /home
//注意输入完指令之后一定要输入两次Ctrl+D用来结束任务
案例二:atq命令查看系统中没有执行的工作任务
atq
案例三:明天17点钟,输出时间到指定文件内 比如 /root/date100.log
at 5pm tomorrow
at > date > /root.date100.log
//注意输入两次Ctrl+D
案例四:2分钟后,输出时间到指定文件内 比如/root/date200.log
at now + 2 minutes
at > date > /root/date200.log
//注意输入两次Ctrl+D
案例五:删除已经设置的任务,atrm编号
atrm 2
//此时2号任务就被会拿掉
注意
我们也可以执行一个shell脚本
如:
at now + 2 minutes
at > my.sh
但是前提是我们需要修改它的权限,有可执行权限
chmod u+x my.sh