文章目录
- 🥝crond周期性任务调度
- 🍂语法格式
- 需求:创建一个定时任务,将etc目录下面的文件列表查询出来,追加到/tmp/etc.txt文件中,并每分钟执行一次
- 📖crond任务调度的时间规则
- 🍋🟩占位符说明
- 🍋🟩特殊符号说明
- 特殊时间执行示例 🧾
- crond任务调度案例
- 案例1:每隔1分钟,将当前的日期信息追加到/tmp/mydate.txt文件中。
- 案例2:每隔1分钟,将将当前的日期和日历都追加到/home/mycal.txt文件中
- ⚠️我们需要修改脚本的权限,使当前用户root能够对脚本进行执行:
- 案例3:每天凌晨2点,将mysql数据库testdb,备份到文件中。
- 🔜 .sh后缀文件说明
- 🥝at一次性任务调度
- 🍋🟩at任务机制简单介绍
- 🍋🟩at时间定义
- at任务调度案例
- 🍂语法格式
- 🍂at常用选项
- 栗子🌰
- 案例1:两天后的下午6点执行ll命令
- 案例2:明天17点钟,输出时间都指定文件内,比如/home/date100.log
- 案例3:2分钟后,输出时间到指定文件内,比如/home/dat200.log
- 案例4:删除已经设置好的1号任务
- 案例5:-m发送邮件指令的使用
🥝crond周期性任务调度
定时任务调度:每隔指定的时间,执行特定的命令或程序
任务调度的分类:
- 系统任务:有些重要的工作必须周而复始的执行 比如病毒扫描 。
- 个别用户工作: 个别用户希望执行某些程序,比如对mysql数据库的备份。
🍂语法格式
基本语法:crontab [ 选项 ]
常用选项:
-e : 编辑定时任务
-l :查询定时任务
-r :删除当前用户的所有定时任务
-l :列出当前有哪些任务调度
sudo systemctl stop crond :终止任务调度
service crond restart :重启任务调度
需求:创建一个定时任务,将etc目录下面的文件列表查询出来,追加到/tmp/etc.txt文件中,并每分钟执行一次
[root@xq100 tmp]# crontab -e
输入任务调度指令【具体语法在下面】:
*/1 * * * * ls -l /etc/ > /tmp/etc.txt
然后按esc键,保存并退出。
我们在/tmp下面查看,是否存在etc.txt。我们发现存在。
如果我们把这个文件删除,一分钟之后,这个文件又会被创建出来
📖crond任务调度的时间规则
crontab 的时间字段从左到右依次为:
分钟 小时 日期 月份 星期 要执行的命令
🍋🟩占位符说明
项目 | 含义 | 范围 |
---|---|---|
第一个 ’ * ’ | 一个小时当中的第几分钟 | 0 - 59 |
第二个 ’ * ’ | 一天当中的第几个小时 | 0 - 23 |
第三个 ’ * ’ | 一个月当中的第几天 | 1 - 31 |
第四个 ’ * ’ | 一个年当中的第几个月 | 1 - 12 |
第五个 ’ * ’ | 一个周当中的星期几 | 0 - 7(0和7都代表星期日) |
🍋🟩特殊符号说明
特殊符号 | 含义 |
---|---|
* | 代表任何时间,比如第一个’ * '就代表1小时中每分钟都执行1次的意思 |
, | 代表不连续的时间,比如"0 8,12,16 * * * "代表一天中的8点过0分,12点过0分,16点过0分都会执行1次 |
- | 代表连续的时间范围,比如" 0 5 * * 1-6 " 就代表星期一到星期六的凌晨5点过0分都会执行 |
*/n | 代表每隔多久执行1次,比如" */10 * * * * " 就代表每隔10分钟就执行1次命令 |
特殊时间执行示例 🧾
时间指令 | 含义 |
---|---|
45 22 * * * | 每天在22时45分执行任务 |
0 17 * * 1 | 每周一的17点过0分执行任务 |
0 5 1,15 * * | 每月的1号和15号的凌晨5点钟执行任务 |
40 4 * * 1-5 | 每周1-到周5的凌晨4:40分执行任务 |
*/10 4 * * * | 每天的凌晨4点,每隔10分钟就执行1次任务 |
crond任务调度案例
案例1:每隔1分钟,将当前的日期信息追加到/tmp/mydate.txt文件中。
命令:
[root@hygge tmp]# */1 * * * * date >> /tmp/mydate.txt
案例2:每隔1分钟,将将当前的日期和日历都追加到/home/mycal.txt文件中
分析:由于现在有获取当前的日期和日期两个指令,所以我们可以将这两条命令定义在脚本里面。然后再通过定时任务调度去执行脚本即可
[root@hygge home]# cd /home
[root@hygge home]# vim my.sh
在my.sh里面编辑:
date >> /home/mycal.txt
cal >> /home/mycal.txt
按ESC,保存并退出。但是我们发现这个脚本,root没有执行权限。
⚠️我们需要修改脚本的权限,使当前用户root能够对脚本进行执行:
[root@hygge home]# chmod 774 my.sh
接下来我们需要动态执行脚本:
[root@hygge tmp]# crontab -e
保存并退出即可。我们查看效果:
案例3:每天凌晨2点,将mysql数据库testdb,备份到文件中。
(提示:备份数据库的指令为 mysqldump-u root -p密码 数据库名称 > /home/文件名称)
第一步: crontab -e
第二步:0 2 * * * mysqldump -u root -proot testdb > /home/db.bak
🔜 .sh后缀文件说明
在 Linux 里,.sh文件属于 shell 脚本文件 。其作用是把一系列 Linux 命令或者 shell 命令整合起来,进而达成特定的任务。一般编写给定时任务调度执行的脚本文件都用.sh作为后缀
🥝at一次性任务调度
🍋🟩at任务机制简单介绍
- at命令是一次性定时执行任务计划,at的守护线程atd以后台的模式运行,检查作业队列来运行。
- 默认情况下,atd守护线程每60秒检查作业队列,有作业时会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。
- at命令是一次性定制的计划任务,执行完一个任务后就不再执行此任务了。
- 在使用at命令的时候,一定要保证atd进程的启动,可以用相关指令来查看atd进程: ps -ef | grep atd
下面我们用一幅图来说明at任务调度机制:
🍋🟩at时间定义
格式 | 含义 | 举例 |
---|---|---|
HH:MM | 当天 HH:MM 执行,若当天时间已过,则在明天 HH:MM 执行 | 当天 4:00 (若超时则为明天 4:00) |
英文粗略时间单词 | midnight(午夜,00:00)、noon(中午,12:00)、teatime(下午茶时间,16:00) tomorrow(明天) | midnight、noon、teatime |
英文月名A 日期B [年份C] | C年A月B日执行 | 在 2018 年 1 月 15 日执行:January 15 2018 |
日期时间戳形式 | 绝对计时法 : 时间+日期 时间:HH:MM 日期:MMDDYY 或 MM/DD/YY 或 MM.DD.YY | 在 2018 年 1 月 15 日执行:011518 或 01/15/18 或 01.15.18 |
now + 数量 单位 | 相对计时法 以 minutes、hours、days 或 weeks 为单位 | 5 天后的此时此刻执行:now + 5 days |
at任务调度案例
🍂语法格式
at [ 选项 ] [ 时间 ]
at > 命令(填写完后输入两次Ctrl + D)
释义:
第一行:at 指令输入结束后,回车到下一行输入指令
第二行:开头的 at> 无需输入,是系统自动添加的
命令输入结束后:Ctrl + D 结束命令的输入,要输入两次
🍂at常用选项
常用选项 | 含义 |
---|---|
-V | 显示at命令的版本信息。 |
-q <队列> | 指定任务队列(队列名称为单个字母,如a、b等),不同队列可能有不同的优先级或特性。 |
-f <文件> | 从指定文件中读取要执行的命令,而不是在交互模式下输入。 |
-l (= atq命令) | 列出当前用户的所有待执行at任务。 |
-d <任务号>(= atrm命令) | 删除指定的at任务。 |
-c <任务号> | 查看指定at任务的具体内容(命令或脚本)。 |
-m | 当任务执行完毕后,即使没有输出,也向用户发送邮件通知。 |
-t <时间参数> | 以时间参数的形式指定任务执行时间,格式为MMDDhhmm[YY]或MM/DD/YY hh:mm。 |
栗子🌰
案例1:两天后的下午6点执行ll命令
[root@hygge ~]# at 6pm + 2days
运行结果:
案例2:明天17点钟,输出时间都指定文件内,比如/home/date100.log
[root@hygge ~]# at 5pm tomorrow
运行结果:
案例3:2分钟后,输出时间到指定文件内,比如/home/dat200.log
[root@hygge ~]# at now + 2 minutes
运行结果:
使用atq查看队列任务:
2分钟之后,我们再次查看队列任务:
我们发现6号任务没有了,因为6号任务执行了,就从任务队列里面被移除了
案例4:删除已经设置好的1号任务
[root@hygge ~]# atrm 1
运行结果:
案例5:-m发送邮件指令的使用
[root@hygge home]# at -m now + 1 minutes
运行结果:
切记:输完指令后,按两次Ctrl+D结束
如果我的内容对你有帮助,请 点赞 , 评论 , 收藏 。创作不易,大家的支持就是我坚持下去的动力!