1 crond任务调度
1.1 基本介绍
-
任务调度:系统在某个时间定时执行特定的命令或程序
-
任务调度分类
① 系统任务调度:系统某些工作需要周而复始、重复地执行,如病毒扫描、日志清理
② 用户任务调度:个别用户可能需要定时执行的工作,如备份数据库、用户数据备份 -
拓展
① 系统任务调度的配置文件为/etc/crontab
② 用户自定义的任务调度需要使用crontab指令来设置,设置后产生的crontab文件会存放/var/spool/cron目录下,文件名与用户名一致 -
crond服务
-
概述:crond是Linux系统内部一个服务/程序/软件,用于定时执行特定的命令或程序/脚本
-
相关命令
命令 解释 service crond status 查看当前crond服务状态 service crond start 开启crond服务 service crond stop 停止crond服务 service crond restart 重启crond服务
-
1.2 crontab指令
-
基本语法:
crontab [选项]
-
常用选项
选项 解释 -e e是edit的意识,即编辑/设置/修改当前用户的定时任务 -l l是list的意思,即列出/查看/打印/输出当前用户的全部定时任务 -r r是remove的意思,即移除/删除当前用户的全部定时任务 PS:使用[选项]
-e
后,即执行crontab -e
命令,会进入类似于vim编辑器的编辑界面,vim编辑器的语法在次同样适用,此时就可以将要设置的命令或程序写进入即可,保存后就会生成一个crontab文件 -
简单测试
-
在tom用户下,创建一个定时任务——每分钟将/home/tom目录下的信息添加到/home/tom/my-crond.txt文件中
① 先打开定时任务编辑界面 -->
crontab -e
② 往编辑界面中输入该命令 -->*/1 * * * * ls - l /home/tom/ > /home/tom/my-crond.txt
(相当于每分钟执行一次ll /etc/ > /home/tom/my-crond.txt
命令)
-
查看tom用户下所有的定时任务 -->
crontab -l
-
1.3 设置任务的具体语法
-
概述:上面介绍的crontab命令是用来编辑、存放和管理定时任务,而具体设置定时任务需要设置任务的执行周期
-
基本语法:
设置时间 要定时执行的命令/程序/脚本
-
设置时间的格式说明
-
例子:以上面的测试为例,向crantab文件中输入命令——
*/1 * * * * ls - l /home/tom/ > /home/tom/my-crond.txt
,可以看出该命令分为两个部分,前一部分就是用于设置时间——*/1 * * * *
-
时间格式具体解释:该格式分为5个组成部分,从左往右分别表示分钟、小时、日、月、星期
每一部分 范围 分钟 0-59(从0开始,小时也是) 小时 0-23 日 1-31 月 1-12 星期 0-7,其中0和7都表示星期日 PS:每一部分之间必须用空格隔开,不然会有语法错误,设置时间的格式与后面的命令也要用空格隔开
-
时间格式中的各个字符解释
字符 解释 例子 例子解释 * 通配符,表示任意时间 1 4 * * * 每月每日的4时01分执行一次 */数字n 表示每隔多久执行一次,数字n就是间隔时间,如果n=1,则相当于一个* */2 * * * * 每月每日每个小时内每2分钟执行一次 , 表示不连续的执行时间 12 5 3,5,10 * * 每月的3号、5号和10号这三天的5时12分执行一次 - 表示连续的执行时间范围 12 5 3-10 * * 每月的3号至10号的5时12分执行一次
-
-
拓展测试:每分钟将当前时间和日历追加到/home/tom/my-time.txt文件中,时间和日历是两个命令,可以将两个命令写到shell脚本中,设置定时任务时直接设置定时执行对应的shell脚本文件即可
PS:这里涉及shell脚本的执行方式,参考博文:https://blog.csdn.net/timchen525/article/details/76407735、https://blog.csdn.net/yanxilou/article/details/88948709
① 先在/home/tom目录下创建一个shell脚本,命名为my-shell.sh(后缀名是.sh) -->
vim /home/tom/my-shell.sh
,用vim编辑器打开脚本文件后,在文件内添加两条命令 -->date >> /home/tom/my-time.txt
和cal >> /home/tom/my-time.txt
② 然后查看my-shell.sh脚本文件的权限,如果对于所有者(tom)无执行权限x就给他添加上 -->
chmod u+x /home/tom/my-time.txt
③ 在crontab文件中添加定时任务,直接执行shell文件即可 -->
*/1 * * * * /home/tom/my-shell.sh
④ 过一段时间后,打印/home/tom/my-time.txt文件查看 -->
cat /home/tom/my-time.txt
2 at定时任务
2.1 基本介绍
-
at命令:at命令是一次性定时计划任务,at命令的守护进程atd会以后台模式检查任务队列(作业队列)来执行对应的任务
-
定时执行任务:默认情况下,守护进程atd每隔60秒回检查一次任务队列(作业队列),队列中有作业时,atd会再检查作业的运行时间,如果当前时间与该作业的运行时间一致,则执行该作业
-
一次性定时执行:已被执行的作业会被移出作业队列,以后不会再执行该作业,因此at命令设置的是一次性定时任务
PS:crontab指令设置的是周期性定时任务
-
注意事项
- 使用at命令时,一定要保证atd守护进程的开启,检查atd进程是否开启的指令 -->
ps -ef | grep atd
- 与crontab指令一样,at指令可以执行简单的命令,也可以执行shell脚本文件
- 使用at命令时,一定要保证atd守护进程的开启,检查atd进程是否开启的指令 -->
2.2 at指令
-
基本语法:
at [选项] [时间]
-
设置at定时任务过程:先使用at指令进入任务编辑/设置状态,然后输入具体要定时执行的命令或程序/shell脚本,最后输入两次ctrl+D完成定时任务设置
-
其他常用命令
atq
:查看当前所有at定时任务atrm 任务编号(作业号)
:从任务队列中移除对应的任务
-
at指令的选项
选项 解释 -m 当指定的定时任务执行完成后,给用户发送邮件,即使没有标准输出 -I 查看当前所有at定时任务,atq命令的别名 -d 从任务队列中移除定时任务,atrm命令的别名 -v 显示定时任务被执行的时间 -c 打印定时任务的内容到标准输出 -V 查看版本信息,注意这里是大写的V -q <队列> 使用执行的作业队列 -f <文件> 从指定文件读入任务而不是从标准输入读取 -t <时间参数> 以时间参数的形式提交要执行的任务 ❓标准输入输出
- 标准输入:从键盘获得输入,文件描述符为0
- 标砖输出:输出/打印到控制台,文件描述符为1
-
at指令的时间格式
时间格式 解释 举例 hh:mm 当天的某时某分 06:00 midnight或noon或teatime 直接使用时间单词的模糊表示 —— [指定时间]pm 使用12小时计时制表示 5pm(下午5点,即17点) [指定时间] [月 日]或[日/月/年]或[日.月.年]或[年-月-日]等 在时间后添加具体的日期,注意:日期一定要放在时间的后面 04:00 2022-1-13 [指定时间] + [表示时间的量词] [时间单位] 使用相对计时法表示;如果[指定时间]为当前时间,则可以使用now代替当前时间;时间单位包括minutes、hours、days、months、years、weeks等 now + 5 minutes(5分钟后) [指定时间] today或tomorrow 使用时间单词表示今天明天,类似于指定一个具体日期 04:00 tomorrow(明天4点) -
测试
① 明天17点将当前时间打印/输出到/home/tom/curr-date.log文件(如果不存在,会自动创建)中 -->
at 5pm tomorrow
+ 回车 +date > /home/tom/curr-date.log
+ 两次ctrl+D
② 2分钟后将日期打印到/home/tom/curr-date.log文件中 -->
at now + 2 minutes
+ 回车 +cal > /home/tom/curr-date.log
+ 两次ctrl+D
③ 查看当前所有at定时任务 -->
atq