『学了就忘』Linux系统定时任务 — 89、任务调度工具anacron
在Linxu系统中,有三种用于任务调度的工具
at
命令调用atd
服务crontab
命令调用cron(crond)
服务。anacron
工具。
1、任务调度工具anacron介绍
(1)anacron
工具是用来干什么的呢?
如果Linux服务器不是24小时开机的,那么刚好在关机的时间段之内有系统定时任务(cron
)需要执行,那么这些定时任务是不会执行的。
假设我们需要在凌晨3点03分执行系统的日志备份,但是我们的Linux服务器不是24小时开机的,在晚上需要关机,白天上班之后才会再次开机。这个定时任务的执行时间,我们的服务器刚好没有开机,那么这个任务就不会执行了,anacron
工具就是用来解决这个问题的。
anacron
工具会使用一天,七天,一个月作为检测周期,用来判断是否有定时任务在关机之后没有被执行,如果有这样的任务,anacron
工具会在特定的时间重新执行这些定时任务。
anacron
工具以天为单位,周期性地执行命令。anacron
是以天为单位,而 cron
最小执行的周期是分钟。
(2)那么anacron
工具是如何判断这些定时任务已经超过了执行时间的呢?
在系统的/var/spool/anacron/
目录中存在cron.{daily,weekly,monthly}
文件,这些文件中都保存着anacron
工具上次执行时的时间。anacron
工具会去读取这些文件中的时间,然后和当前时间做比较,若果两个时间的差值超过了anacron
工具配置文件中的指定时间差值(一般是1天,7天和一个月)(/etc/anacrontab
文件),就说明有定时任务漏掉了没有被执行,这时anacron
工具会介入而执行这个漏掉的定时任务,从而保证在关机时没有被执行的定时任务,不会被漏掉。
2、新旧版本Linux中anacron工具的区别
在原先的CentOS 5.x
版中/etc/cron.{daily,weekly,monthly}
这些目录中的定时任务会同时被cron
工具和anacron
工具调用,这样非常容易出现重复执行同一个定时任务的错误。
在CentOS 6.x
中,我们使用cronie-anacron
取代了vixie-cron
软件包。/etc/cron.{daily,weekly,monthly}
目录中的定时任务程序只会被anacron
工具调用,从而保证这些定时任务只会在每天、每周或每月被定时执行一次,而不会重复执行。这也是我们在上一篇文章中介绍的CentOS 6.x
的变化之一。
3、/etc/cron.{daily,weekly,monthly}目录说明
在/etc
目录下面有crontab
的两个文件crontab
和cron.deny
,还有五个目录cron.d
、cron.daily
、cron.hourly
、cron.monthly
、cron.weekly
。
如下图所示:
说明:
cron.deny
:文件就是用于控制不让哪些用户使用Crontab
的功能。crontab
:是设定定时任务执行文件。cron.d
:是系统自动定期需要做的任务。cron.daily
:是每天执行一次的job
。cron.hourly
:是每个小时执行一次的job
。cron.monthly
:是每月执行一次的job
。cron.weekly
:是每个星期执行一次的job
。
4、anacron命令
在CentOS 6.x
中anacron
命令还有一个变化,anacron
工具不再是单独的服务,而变成了系统命令。也就是说我们不再可以使用service anacron restart
命令来管理anacron
服务了。而是需要使用anacron
命令来管理anacron
工具工作,具体命令如下:
[root@localhost ~]# anacron [选项] [工作名]
选项:
-s:开始anacron工作,依据/etc/anacrontab文件中的设定的延迟时间执行。
-n:立即执行/etc/anacrontab中所有的工作,忽略所有的延迟时间。
-u:更新/var/spool/anacron/cron.{dai ly,weekly,monthly}文件中的时间戳,但不执行任何工作
参数:
工作名:是依据/etc/anacrontab文件中定义的工作名
在Linux 6版本中,其实不需要执行任何anacron
命令,只需要配置好/etc/anacrontab
文件,系统就会依赖这个文件中的设定,来通过anacron
工具执行定时任务。
那么关键就是/etc/anacrontab
文件的内容了,这个文件如下:
# 在vim编辑器中打开/etc/anacrontab文件
[root@localhost ~]# vim /etc/anacrontab
# 下面是/etc/anacrontab文件内容
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
# 前面的内容和/etc/crontab类似都是一些变量的设置
# 标识使用哪种shell
SHELL=/bin/sh
# 指定PATH环境变量,crontab是使用自己的PATH,
# 而不是用系统默认的,所以在定时任务中出现的命令最好使用绝对路径。
PATH=/sbin:/bin:/usr/sbin:/usr/bin
# 如果有报错输出,或命令结果有输出,会向root发信息
MAILTO=root
# the maximal random delay added to the base delay of the jobs
# 最大随机延迟。
# 意思是:服务器开机以后,会和`/var/spool/anacron/`目录中文件的内容对比时间
# 发现超过一天,那`/etc/cron.{daily,weekly,monthly}`这些目录中的可执行文件
# 就都会被执行,这么多可执行脚本不能同时执行,那样服务器的负载会非常大。
# 在开机45分钟之内,给每个一脚本随机一个时间,一个一个来执行。
RANDOM_DELAY=45
# the jobs will be started during the following hours only
# 设置允许anacron的执行时间范围是3:00-22:00
# 这个可以按照自己的需求修改。
START_HOURS_RANGE=3-22
# 下面就是我们的定时任务
# 意思是:时间差超过天数时,强制延迟多少分钟之后,就执行命令
#天数 强制延迟(分) 工作名称 实际执行的命令
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
说明:在上面文件中
RANDOM_DELAY
定义的是最大随机延迟,也就是说cron.daily
任务如果超过1天没有执行,并不会马上执行,而是先延迟强制延迟时间之后,再延迟随机延迟时间之后再执行命令。START_HOURS_RANGE
定义anacron
的执行时间范围,anacron
只会在这个时间范围之内执行。period in days
执行周期;最小 1 天,也可以 3 天,5 天,一个星期(7 天)乃至一个月(月份不能确定有多少天,所以用@monthly
代替)。delay in minutes
延迟多长时间执行,以分钟为单位。为了避免多个任务在同一时间执行而造成服务器繁忙,所以应该错峰执行。job-identifier
任务的唯一标识。它用来创建文件记录任务执行的时间,通常创建在/var/spool/anacron/
目录中。command
真正执行的命令。
5、/etc/anacrontab的执行过程
我们用上面配置文件中的cron.daily
工作来说明下/etc/anacrontab
的执行过程:
- 首先读取
/var/spool/anacron/cron.daily
中的上一次anacron
执行的时间. - 和当前时间比较,如果两个时间的差值超过1天,就执行
cron.daily
工作。 - 执行这个工作只能在
03:00-22:00
之间。 - 执行工作时强制延迟时间为5分钟,再随机延迟
0-45
分钟时间。 - 使用nice命令指定默认优先级,使用
run-parts
脚本执行/etc/cron.daily
目录中的所有可执行文件。
大家发现了吧,/etc/cron.{daily,weekly,monthly}
中的脚本,在当前的Linux中是被anacron
调用的,不再依靠cron
服务。(最重要的你要知道:无论在新旧版本的Linux系统中,/etc/cron.{daily,weekly,monthly}
目录中的脚本文件,都是可以被正常执行的,关于是cron
工具和anacron
工具谁来调用的,你可以不用关心。)不过anacron
不用设置多余的配置,我们只需要把需要定时执行的脚本放入/etc/cron.{daily,weekly,monthly}
目录当中,就会每天、每周或每月执行,而且也不再需要启动anacron
服务了,因为anacron
命令是一个系统命令。
『学了就忘』Linux系统定时任务 — 89、任务调度工具anacron的更多相关文章
- 『学了就忘』Linux系统定时任务 — 87、只执行一次的定时任务
目录 1.at服务管理 2.at命令的访问控制 3.at命令 4.其他at管理命令 5.总结 定时任务是在服务器上常用到的一个工作. 在你指定的时间,系统会自动执行你指定的程序(脚本或者命令). Li ...
- 『学了就忘』Linux系统定时任务 — 88、循环执行定时任务
目录 1.crond服务管理与访问控制 2.crontab命令的访问控制 3.用户级别的crontab命令 4.crontab命令的注意事项 5.系统的crontab设置 (1)/etc/cronta ...
- 『学了就忘』Linux软件包管理 — 49、拓展:Linux中通过脚本安装程序
目录 1.脚本程序简介 2.Webmin安装 (1)简介 (2)安装 (3)使用 1.脚本程序简介 脚本程序包并不多见,所以在软件包分类中并没有把它列为一类.它更加类似于Windows下的程序安装,有 ...
- 『学了就忘』Linux基础 — 6、VMware虚拟机安装Linux系统(超详细)
目录 1.打开VMware虚拟机软件 2.选择Linux系统的ISO安装镜像 3.开启虚拟机安装系统 (1)进入Linux系统安装界面 (2)硬件检测 (3)检测光盘 (4)欢迎界面 (5)选择语言 ...
- 『学了就忘』Linux基础 — 7、补充:安装Linxu系统时设置硬盘挂载说明
目录 (1)新建一个/home分区 (2)再创建一个/boot分区. (3)创建一个swap分区 (4)最后剩余的空间全部分给根目录 (5)总结 上一篇在VMwar虚拟机中安装Linux操作系统中ht ...
- 『学了就忘』Linux基础 — 11、通过setup工具配置Linux系统IP地址
目录 1.setup命令介绍 2.使用setup命令配置IP (1)执行setup命令 (2)进入图形化配置界面 (3)选择配置IP还是DNS (4)选择要配置的网卡 (5)进入IP地址配置页面 (6 ...
- 『学了就忘』Linux基础 — 13、Linux系统的分区和格式化
目录 1.Linux系统的分区 (1)磁盘分区定义 (2)两种分区表形式 (3)MBR分区类型 2.Linux系统的格式化 (1)格式化定义 (2)格式化说明 1.Linux系统的分区 (1)磁盘分区 ...
- 『学了就忘』Linux基础 — 14、Linux系统的设备文件名和挂载
目录 1.设备文件名 (1)为什么需要设备文件名 (2)硬件设备文件名命名规则 2.挂载点 3.挂载 (1)什么是挂载 (2)挂载前的分区要求 (3)小结(重点) 1.设备文件名 (1)为什么需要设备 ...
- 『学了就忘』Linux基础 — 15、了解Linux系统的目录结构
目录 1.一级目录说明 (1)一级目录列表 (2)/bin/和/sbin/目录说明 (3)/boot/目录说明 (4)/lib/和/lib64/目录说明 (5)/lost+found/目录说明 (6) ...
随机推荐
- git分支切换的一些问题
关于git切换分支后该分支的修改会在另一个分支里面一起修改的问题 修改分支后导致稳定版的主分支里面的文件连带修改. 原因:切换分支前原分支没有提交,导致新建的文件或者文件夹,没有纳入版本管理,所以会被 ...
- CF1554E You
考虑到删点操作的实质是指认边的方向. 由于这是一棵树,所以有很好的性质. 我们完全可以以此从树叶开始,往上拓扑进行,按照对某个数的取膜的大小来进行操作. 由此可知,除了 \(1\) 以外,任意 \(2 ...
- Codeforces 576D - Flights for Regular Customers(bitset 优化广义矩阵乘法)
题面传送门 题意: 有一张 \(n\) 个点 \(m\) 条边的有向图,你初始在 \(1\) 号点,边上有边权 \(c_i\) 表示只有当你经过至少 \(c_i\) 条边的时候你才能经过第 \(i\) ...
- NOIP 2020 游记
第一次写比赛游记,请多多指教! I. 考前 由于最近参加了太多太多比赛了,所以没有敲模板题: 考前一周:主要是在做 AtCoder 的题和 xjoi 的模拟赛,相当于恶补了一些套路吧! 考前一天:上午 ...
- Linux下脚本文件第一行的作用
Linux下脚本文件第一行的作用 在Linux/Unix系统中,你可以在脚本hello.py顶部添加以下命令让Python脚本可以像SHELL脚本一样可直接执行: #! /usr/bin/env py ...
- 监督学习&非监督学习
监督学习 1 - 3 - Supervised Learning 在监督学习中,数据集中的每个例子,算法将预测得到例子的""正确答案"",像房子的价格,或者溜 ...
- 学习java的第十三天
一.今日收获(前两天家里有事,博客都忘了发了,唉) 1.通过看哔哩哔哩看黑马程序员的教学视频,学习了java中的数据类型自动转换.强制转换及注意事项三节 2.简单看了看完全学习手册 二.今日问题 1. ...
- Go Robot
1 <html> 2 <meta http-equiv="Content-Type" content="text/html; charset=utf-8 ...
- echarts饼图样式
1.中间标题字体大小不一致(可分为一个title一个graphic) 2.labelLine与饼图分离(两个饼图,其中一个显示一个隐藏) function setmyChartJsgxzq(arr,d ...
- 【swift】复制后,为Xcode工程项目重新修改名称
感谢,参考了另一篇博客:https://www.jianshu.com/p/abf10c9609ef 我做了一些修改,和自己遇到的情况 我用的是繁体的mac,所以下面图片内,鼠标右键点出来的文字(丢到 ...