目录
一 crond任务调度
1 概述
任务调度
任务调度分类
2 基本语法
3 常用选项
4 快速入门
任务
步骤
参数细节说明
特殊符号说明
5 实用案例
案例一:每隔1分钟,就讲当前的日期信息追加到/tmp/mydate文件中
案例二:每隔1分钟,将当前日期和日历都追加到/tmp/mycal文件中
6 crond相关指令
二 at定时任务
1 基本介绍
2 at命令格式
3 at命令选项
4 at时间定义
5 应用实例
案例1 :2天后的下午5点执行 /bin/ls /home
案例2:atq命令来查看系统中没有执行的工作任务
案例3:明天17点,输出时间到指定文件内,比如/root/date100.log
案例4:2分钟后输出时间到指定文件内,比如/root/date200.log
案例5:删除已经设置的任务
案例6:2min之后执行一个sh脚本
crontab 进行 定时任务的设置
是指系统在某个时间执行的特定的命令或程序
(1)系统工作:有些重要的工作必须周而复始的执行,比如病毒扫描
(2)个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份
crond任务调度原理图如下图所示
crond是linux的后台程序
crontab 选项
-e edit编辑crontab定时任务
-l list查询crontab任务
-r remove删除当前用户所有的crontab任务
通过crontab -e指令,设置任务调度文件:/etc/crontab
设置个人任务调度。执行crontab -e命令
接着输入任务到调度文件
如:*/1 * * * * ls -l /etc/ > /tmp/to.txt
意思是所每个小时的每分钟执行ls -l /etc/ > /tmp/to.txt命令
ls -l /etc/的意思是在终端打印/etc目录下的内容
>表示重定向,注意这里是覆盖写,to.txt文件如果不存在会直接自动创建一个
*/1表示每隔1min执行一次
第二个*表示0-23h的每个小时都执行
第三个*表示1-31的每一天
第四个*表示1-12的每个月
第五个*表示0-7的每一天
登录root,输入crontab -e命令
回车,进入以下界面输入*/1 * * * * ls -l /etc/ > /tmp/to.txt,要注意指令里面的各种空格
esc键后:wq回到会话界面,会显示crontab: installing new crontab
cd到/tmp目录下查看to.txt是否已经生成,如下图所示,已经生成
也可以用ll查看to.txt是否已经生成,如下图所示
查看to.txt文件的内容,可以用cat to.txt也可以用more to.txt查看文件内容
可见显示的是/etc目录下的文件
如果将to.txt文件删掉,一分钟后会自动生成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点0分执行命令
*/*n 代表每隔多久执行一次。比如*/10 * * * *命令,代表每隔10分钟就执行一遍命令
特殊时间执行案例
45 22 *** 命令 在22点45分执行命令
0 17 **1命令 每周1的17点0分执行命令
0 5 1,15 **命令 每月1号和15号的凌晨5点0分执行命令
40 4 ** 1-5 命令 每周一到周五凌晨4点40分执行命令
*/10 4 *** 命令 每天的凌晨4点,每隔10分钟执行一次命令
0 0 1,15 * 1 命令 每月1号15号,每周1的0点0分都会执行命令 注意:星期几和几号最好不要同时出现,因为都是对天的定义,很容易让管理员混乱
*/1 * * * * date >> /tmp/mydate
注意 >> 表示追加,是将内容追加到文件的末尾,> 表示覆盖
如下图所示,这次使用shell脚本
步骤
首先在/home下vim一个sh文件
回车后,写下指令如下
保存退出,查看权限
需要给root一个执行权限,chmod u+x my.sh
执行my.sh文件
发现会创建mycal文件,打开mycal文件
发现日期和日历都已经追加成功,再次执行查看
现在只要实现定时调动即可
输入crontab -e
回车,在输入界面按下i进入编辑模式,写下以下指令,之前写的指令不用管,
esc,:wq,然后cat一下mycal看看是不是每分钟追加日期和日历信息
案例三:每天凌晨2点将mysql数据库testdb备份到文件中----暂时没有数据库,先不演示
提示:指令为mysqldump -u 用户名 -p 密码 数据库 > /home/db.bak
步骤1:crontab -e
步骤2:0 2 * * * mysqldump -u root -p 密码 testdb > /home/db.bak
crontab -r 终止任务调度
crontab -l 列出当前有哪些调度
先删除再查看会显示no crontab for root
service crontab restart 重启任务调度
crond是周而复始的执行,at是一次性定时执行
(1)at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行
(2)默认情况下,atd守护进程每60秒检查作业队列(任务队列),有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行次作业
(3)at命令是一次性定时计划任务,执行完一个任务后不再执行此任务了
(4)在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看
ps -ef 查看所有当前正在运行的进程
ps -ef | grep atd 可以查看atd进程是否在运行
说明atd正在运行
at 选项 时间 在job队列中添加一个作业
ctrl + d 结束at命令的输入,输出两次
-m 当指定的任务被完成后,将给用户发送邮件,即使没有标准输出
-l atq的别名
-d atrm的别名
-v 显示任务将被执行的时间
-c 打印任务的内容到标准输出
-v 显示版本信息
-q<队列> 使用指定的队列
-f<文件> 从指定文件读入任务而不是从标准输入读入
-t<时间参数> 以时间参数的形式提交要运行的任务
at指定时间的方法
(1)接受在当天的hh:mm(小时:分钟)式的时间指定。假如改时间已经过去,那么就放在第二天执行。例如:04:00 表示今天的凌晨4点,如果过了这个时间就明天凌晨4点再执行
(2)使用midnight(深夜),noon(中午),teatime(下午四点)等比较模糊的词语来指定时间
(3)采用12小时计时时制,即在时间后面加上 AM或PM来说明是上午还是下午。例如:12pm
(4)指定命令执行的具体日期,指定格式为month day月日 或mm/dd/yy 月日年 或 dd.mm.yy 日月年,指定的日期必须跟在指定时间的后面 例如:04:00 2022-08-26
(5)使用相对计时法。指定格式为:now+count time-units
now 就是当前时间,time-units是时间单位,可以是minutes hours days weeks
count是实践的数量,几天 几小时 例如now+5 minutes 表示五分钟之后执行这个任务
(6)直接使用today今天,tomorrow明天来指定完成命令的时间
输入两次CTRL+D之后输出的job 1 at ……中的1代表这是job队列中的第一个job
进入at> 之后如果输入的指令输错了,按backspace删除不掉,要按下CTRL+backspace才可以删除
2min之后查看root下是否新建了date200.log文件,发现新建成功如下图所示
使用cat查看是否完成指令执行,如下图所示日期追加成功
atrm 编号
atrm 1 表示将job队列,编号为1的job删除
前提是必须先有.sh文件才行