面试题分享|Linux定时任务调度机制是怎么回事?

news2024/11/19 7:42:54

一. 前言

在求职过程中,有过面试经历的小伙伴们都知道,企业对linux的考察还是蛮频繁的。作为java开发程序员,在企业中我们的服务器都是在linux环境中部署的,所以熟练使用linux已经成为企业招聘人才的基本需求。但很多小伙伴在学习中很少使用linux,导致在面试中被问到linux时屡屡翻车,所以文哥专门收集了自己班级的学员,在面试时与linux相关的题目。今天文哥就以任务调度为例,来给大家谈谈linux中的定时任务调度。

二. 什么是定时任务调度

什么是任务调度?文哥是这么理解的,就是在linux操作系统中,需要定时或定期执行的任务。这些任务可能需要周而复始的执行,也可能是到点执行,只执行1次。那么这些任务有哪些呢?我做了两个分类:

第一:系统任务,有些重要的工作必须周而复始的执行,比如病毒扫描。

第二:个别用户的工作,个别用户希望执行某些程序,比如对mysql数据库的备份。

搞清楚了任务调度的基本概念之后,linux是如何实现任务调度的呢?这里主要有两个命令需要大家掌握,一个是crontab命令,还有一个是at指令。

三. crontab指令实现任务调度

1.crontab作用

首先我们来看下面这张图,来理解crontab指令的作用:

2.基本用法

crontab基本语法:crontab [选项]

常用选项:

-e:编辑定时任务

-l:查询定时任务

-r:删除当前用户的所有定时任务

3.案例需求

假如我们想创建一个定时任务,可以将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任务调度规则

占位符说明:

项目含义范围

第一个 “*”

一个小时当中的第几分钟

0-59

第二个 “*”

一天当中的第几个小时

0-23

第三个 “*”

一个月当中的第几天

1月31日

第四个 “*”

一年当中的第几个月

1月12日

第五个 “*”

一周当中的星期几

0-7(0和7都代表星期日)

特殊符号说明:

特殊符号含义

*

代表任何时间,比如第一个“*”就代表1小时中每分钟都执行1次的意思。

代表不连续的时间,比如“0,8,12,16 * * *”就代表1天中的8点过0分,12点过0分,16点过0分都会执行1次。

-

代表连续的时间范围,比如“0,5 * * 1-6”就代表星期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次任务

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指令实现任务调度

1.at命令作用

文哥先给大家讲解一下at指令的含义和作用:

  1. at命令是一次性定时执行任务计划,at的守护线程atd以后台的模式运行,检查作业队列来运行。

  2. 默认情况下,atd守护线程每60秒检查作业队列,有作业时会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。

  3. at命令是一次性定制的计划任务,执行完一个任务后就不再执行此任务了。

  4. 在使用at命令的时候,一定要保证atd进程的启动,可以用相关指令来查看(ps -ef | grep atd)。

下面我们用一幅图来说明at任务调度机制:

at时间定义:

格式含义举例

HH:MM

当天 HH:MM 执行,若当天时间已过,则在明天 HH:MM 执行

当天 4:00 (若超时则为明天 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

2.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<EOT>
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<EOT>
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

五. 总结

文哥今天给大家分享了linux实现定时任务调度的几个常用指令。这两个指令在工作中是非常实用的,希望通过今天的分享,小伙伴们都能够熟练使用这两个命令。如果你在面试时被问到linux任务调度的实现,大家就可以按照文哥这篇帖子里的讲解去回答。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/69920.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于蚁群算法的车辆路径规划问题的研究(Matlab代码实现)

目录 1 概述 1.1研究背景 2 运行结果 3 Matlab代码实现 4 结语 5 参考文献 1 概述 车辆路径规划问题&#xff08;Vehicle Routing Problem,VRP&#xff09;是现代物流配送过程中的关键环节,而且其在众多领域中都有广泛的应用,因此它的提出引起了不同学科的专家和物流管理…

LeetCode HOT 100 —— 146.LRU缓存

题目 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key存在于缓存中&#xff0c;则返回关键字的值&#xff0c;否则返回…

TI Lab_SRR学习_3 速度扩展_1 预备知识

首先先了解一下SRR模式下的chirp配置是什么样子,SRR的chirp的配置文件可以看(位置位于toolbox中)C:\mmwave_automotive_toolbox_3_1_0__win\mmwave_automotive_toolbox_3_1_0\labs\lab0002_short_range_radar\src\commonsrr_config_chirp_design_SRR80.h 通过以上代码可以知…

网络编程套接字——UDP

一、基础知识 1.区分源地址、目的地址 &#xff08;1&#xff09;源IP地址和目的地址&#xff1a;最开始的IP地址与送达数据的地址 &#xff08;2&#xff09;源MAC地址和目的MAC地址&#xff1a;相当于上一站的地址与下一站的地址&#xff0c;在不断地变化 socket通信&#…

数据库专辑--SQL分类汇总(group by...with rollup),增加“总计”字段

系列文章 C#底层库–数据库访问帮助类&#xff08;MySQL版&#xff09; 数据库专辑–WITH CHECK OPTION的用法 文章目录系列文章前言一、概念介绍二、测试用例2.1 创建表2.2 初始化数据2.3 数据查询2.4 分析问题2.5 解决问题2.6 推荐另一种写法&#xff0c;使用COALESCE三、用…

如何撰写品牌故事?品牌故事软文撰写技巧分享

你听过哪些有温度的品牌故事&#xff1f;我首先想到的是香奈儿&#xff1a; 我的生活不曾取悦于我&#xff0c;所以我创造了自己的生活。 这是香奈儿的创始人可可香奈儿给世人留下的一句话&#xff0c;也是她一生的真实写照。 她被后人看作女性解放和独立的一个象征&#xf…

查询网站有没有被搜狗收录复杂吗?查询搜狗收录简单的方法

对于网站收录的概念&#xff0c;互联网中或者搜索引擎中已经有大量的相关定义。网站收录&#xff0c;指的是爬虫爬取了网页&#xff0c;并将页面内容数据放入搜索引擎数据库中这一结果。 查询网站有没有被搜狗收录复杂吗&#xff1f; 用网站批量查询工具呀&#xff01;操作超简…

React高级备忘录(生命周期)class component

须知 什么是生命周期?就像人有生老病死,component也有类似这样的概念,了解生命周期可以让我们知道如何在「对」的时间做「对」的事。 — Lieutenant 过! 常用生命周期 可以分为三大部分 创建component (componentDidMount)更新component(componentDidUpdate)销毁compone…

照一次CT,对人体的伤害有多大?终于有医生肯站出来说实话

CT是一种检查身体的方式&#xff0c;对于这项检查项目&#xff0c;一直有都有不好的传言&#xff0c;有的人听说CT有辐射&#xff0c;而且辐射比较大&#xff0c;所以比较排斥。 也有的人听说频繁做CT会致癌&#xff0c;所以不愿意做&#xff0c;还有的人把CT当作筛查癌症的神器…

Spring从入门到精通(二)

文章目录1.动态代理1.1 概念1.2 jdk动态代理&#xff08;重点&#xff09;1.3 基于子类的动态代理&#xff08;了解&#xff09;2.AOP2.1 概念2.2 springAop — 基于AspectJ技术2.2.1 AspectJ使用&#xff08;XML&#xff09;2.2.2 AspectJ使用&#xff08;注解开发&#xff09…

【数据结构】二叉树的实现OJ练习

文章目录前言(一) 二叉树的接口实现构建二叉树前序遍历中序遍历后序遍历层序遍历二叉树的节点个数二叉树叶子节点个数二叉树第K层节点个数二叉树的高度查找指定节点判断完全二叉树销毁二叉树(二) 二叉树基础OJ练习单值二叉树相同的树另一棵树的子树二叉树的前序遍历二叉树的最大…

[oeasy]python0026_刷新时间_延迟时间_time_sleep_死循环_while_True

刷新时间 回忆上次内容 time 是一个 ​​module​ import 他可以做和时间相关的事情time.time() 得到当前时间戳 time.localtime() 得到本地时间元组local为本地 time.asctime() 得到时间日期字符串asc为ascii 简略的写法为 asc_time time.asctime() 在​​time.asctime()​…

python -- PyQt5(designer)中文详细教程(六)控件1

控件1 控件就像是应⽤这座房⼦的⼀块块砖。PyQt5有很多的控件&#xff0c;⽐如按钮&#xff0c;单选框&#xff0c;滑动条&#xff0c;复选框等 等。在本章&#xff0c;我们将介绍⼀些很有⽤的控 件&#xff1a; QCheckBox &#xff0c; ToggleButton &#xff0c; QSlider &a…

关于JavaScript运算符的学习

关于博主每篇博文的浪漫主义 【“仅此105秒&#xff0c;无法超越的绝美画面!&#xff01;”】 https://www.bilibili.com/video/BV1nW4y1x78x/?share_sourcecopy_web&vd_source385ba0043075be7c24c4aeb4aaa73352 “仅此105秒&#xff0c;无法超越的绝美画面!&#xff01;…

应用案例:有源无源电路协同仿真

01 有源无源电路协同仿真 随着电路系统集成度和信号速率的提高&#xff0c;电路中的电磁场效应越来越明显&#xff0c;单纯使用电路分析方法已不能满足仿真评估精度要求&#xff0c;这种情况下必须对问题进行分解&#xff0c;采用三维电磁场全波方法对信号传播路径上的封装与…

[附源码]计算机毕业设计JAVA在线文献查阅系统

[附源码]计算机毕业设计JAVA在线文献查阅系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybati…

C# 拖放操作

一 拖放操作 拖放操作Drag and Drop是两个窗口之间传递数据的一种手段。 1 拖放操作两部分&#xff1a;拖Drag、放Drop 几个术语&#xff1a; ① 源窗口&#xff1a;发起拖拽StartDrag; ② 目标窗口&#xff1a;接受拖放AcceptDraop; ③ 拖拽物&#xff1a;即传输的数据Dat…

ChatGPT有多厉害,影响到谷歌地位?

AI神器ChatGPT 火了。 能直接生成代码、会自动修复bug、在线问诊、模仿莎士比亚风格写作……各种话题都能hold住&#xff0c;它就是OpenAI刚刚推出的——ChatGPT。 有脑洞大开的网友甚至用它来设计游戏&#xff1a;先用ChatGPT生成游戏设定&#xff0c;再用Midjourney出图&…

外贸小白,一直不出单怎么办?

米贸搜今天&#xff0c;试着给新人一些方法和技巧&#xff0c;让你尽快在公司立足&#xff01; 事实上&#xff0c;规定几个月内下单的公司&#xff0c;往往都是平台有投资&#xff0c;去展会了&#xff0c;有大量营销费用的公司。当然&#xff0c;老板急着收回成本。对于有足…

网络基本概念

文章目录前言网络分层原因网络分层模型各层大致用途主机网络层网际层传输层应用层总结前言 在日常开发中&#xff0c;大家总是会或多或少的遇到一些网络通信的相关代码&#xff0c;如http请求调用。但是我们却不知道&#xff0c;数据是怎么从一台计算机到另一台计算机的&#…