Linux定时任务调度机制是怎么样的?
一. 前言
在求职过程中,有过面试经历的小伙伴们都知道,企业对linux的考察还是蛮频繁的。作为java开发程序员,在企业中我们的服务器都是在linux环境中部署的,所以熟练使用linux已经成为企业招聘人才的基本需求。但很多小伙伴在学习中很少使用linux,导致在面试中被问到linux时屡屡翻车,所以文哥专门收集了自己班级的学员,在面试时与linux相关的题目。今天就以任务调度为例,来给大家谈谈linux中的定时任务调度。
二. 什么是定时任务调度
什么是任务调度?这么理解的,就是在linux操作系统中,需要定时或定期执行的任务。这些任务可能需要周而复始的执行,也可能是到点执行,只执行1次。那么这些任务有哪些呢?我做了两个分类:
第一:系统任务,有些重要的工作必须周而复始的执行,比如病毒扫描。
第二:个别用户的工作,个别用户希望执行某些程序,比如对mysql数据库的备份。
搞清楚了任务调度的基本概念之后,linux是如何实现任务调度的呢?这里主要有两个命令需要大家掌握,一个是crontab命令,还有一个是at指令。
三. crontab指令实现任务调度
crontab作用
首先我们来看下面这张图,来理解crontab指令的作用:
基本用法
crontab基本语法:crontab [选项]
常用选项:
-e: 编辑定时任务
-l:查询定时任务
-r:删除当前用户的所有定时任务
案例需求
假如我们想创建一个定时任务,可以将etc目录下面的文件列表查询出来,追加到/tmp/etc.txt文件中,并每分钟执行1次。
[root@xq100 tmp]# crontab -e
输入任务调度内容:
*/1 * * * * ls -l /etc/ > /tmp/etc.txt
然后按esc键,保存并退出。
我们在/tmp下面查看,是否存在etc.txt。我们发现存在的。
如果我们把这个文件删除,一分钟之后,这个文件又会被创建出来。
[root@xq100 tmp]# rm -f etc.txt
[root@xq100 tmp]# date
Mon Aug 29 21:46:52 CST 2022
[root@xq100 tmp]# date
Mon Aug 29 21:47:01 CST 2022 #过去了1分钟
[root@xq100 tmp]# ll
total 1188
-rw-r--r--. 1 root root 16802 Aug 29 21:47 etc.txt # 删除的文件又出现了 因为1分钟之后,任务调度又出现了
4. crontab任务调度规则
5. crondtab任务调度实例
下面我们通过几个案例,来进一步理解crond任务调度命令。
案例1:每隔1分钟,将当前的日期信息追加到/tmp/mydate.txt文件中。
[root@xq100 tmp]# */1 * * * * date >> /tmp/mydate.txt
案例2:每隔1分钟,将将当前的日期和日历都追加到/home/mycal.txt文件中。
分析:由于现在有获取当前的日期和日期两个指令,所以我们可以将这两条命令定义在脚本里面。然后再通过定时任务调度去执行脚本即可。
[root@xq100 home]# cd /home
[root@xq100 home]# vim my.sh
在my.sh里面编辑:
date >> /home/mycal.txt
cal >> /home/mycal.txt
按ESC,保存并退出。但是我们发现这个脚本,root没有执行权限。
我们需要修改脚本的权限,使当前用户root能够对脚本进行执行。
[root@xq100 home]# chmod u+x my.sh
接下来我们需要动态执行脚本。
[root@xq100 tmp]# crontab -e
保存并退出即可。我们来查看效果:
案例3:每天凌晨2点,将mysql数据库testdb,备份到文件中。(提示:备份数据库的指令为 mysqldump -u root -p密码 数据库名称 > /home/文件名称)
第一步: crontab -e
第二步:0 2 * * * mysqldump -u root -proot testdb > /home/db.bak
还有其他几个任务调度指令,大家了解一下:
crontab -r :终止任务调度;
contab -l :列出当前有哪些任务调度;
service crond restart [重启任务调度]。
四. at指令实现任务调度
at命令作用
文哥先给大家讲解一下at指令的含义和作用:
at命令是一次性定时执行任务计划,at的守护线程atd以后台的模式运行,检查作业队列来运行。
默认情况下,atd守护线程每60秒检查作业队列,有作业时会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。
at命令是一次性定制的计划任务,执行完一个任务后就不再执行此任务了。
在使用at命令的时候,一定要保证atd进程的启动,可以用相关指令来查看(ps -ef | grep atd)。
下面我们用一幅图来说明at任务调度机制:
at任务调度案例
常用选项
语法格式:
at [选项] [时间]
at > 命令(输入两次 Ctrl + D)
释义:
第一行:at 指令输入结束后,回车到下一行输入指令
第二行:开头的 at> 无需输入,是系统自动添加的
命令输入结束后:Ctrl + D 结束命令的输入,要输入两次
两天后的下午6点执行ll命令
使用atq命令,查看系统中有没有执行工作任务
[root@xq100 home]# atq
1 Wed Aug 31 17:00:00 2022 a root
2 Wed Aug 31 18:00:00 2022 a root
明天17点钟,输出时间都指定文件内,比如/home/date100.log
[root@xq100 home]# at 5pm tomorrow
at> date > /home/date100.log
job 4 at Tue Aug 30 17:00:00 2022
2分钟后,输出时间到指定文件内,比如/home/dat200.log
[root@xq100 home]# at now + 2 minutes
at> date > /home/date200.log
job 5 at Mon Aug 29 23:24:00 2022
使用atq查看队列任务:
2分钟之后,我们再次查看队列任务:
我们发现5号任务没有了,因为5号任务被执行了。所以被移出队列了。这就是为什么使用at指令执行定时任务,任务只执行1次的原因!
删除已经设置好的任务
[root@xq100 home]# atq
1 Wed Aug 31 17:00:00 2022 a root
2 Wed Aug 31 18:00:00 2022 a root
4 Tue Aug 30 17:00:00 2022 a root
[root@xq100 home]# atrm 1 # 删除1号任务
[root@xq100 home]# atq
2 Wed Aug 31 18:00:00 2022 a root
4 Tue Aug 30 17:00:00 2022 a root
相关推荐HOT
更多>>如何添加Java环境变量?
要添加Java环境变量,可以按照以下步骤:并安装Java开发工具包(JDK)、找到Java安装路径、设置JAVA_HOME环境变量、添加Java可执行文件路径到PATH...详情>>
2023-05-04 11:00:56从零开始学Java之String字符串的编码
对很多小白来说,可能不明白什么是字符编码,也不知道为什么要有字符编码,所以先来给大家简要地介绍一下字符编码。详情>>
2023-05-04 10:21:02新手速来!几步带你掌握MyBatis Plus
Mybatis-Plus(简称MP)是一款Mybatis的增强工具,它是在Mybatis的基础上实现的简化开发工具。Mybatis-Plus给我们提供了开箱即用的CRUD操作、自动...详情>>
2023-04-28 10:57:09学习java需要什么基础?基础知识有哪些?
网络编程:了解基本的网络编程概念和协议,熟悉 Java 网络编程 API。建议在学习 Java 之前,先学习一些基础的编程语言,如 C 或 Python 等,这...详情>>
2023-04-28 10:41:14