Linux系统管理
Linux任务调度:重新执行错过的定时任务命令anacron
## 1、任务调度工具anacron介绍 #### (1)anacron工具是用来干什么的呢? 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工具工作,具体命令如下: - 语法: 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文件的内容了,这个文件如下: ```shell # 在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的执行过程: 1. 首先读取/var/spool/anacron/cron.daily中的上一次anacron执行的时间. 2. 和当前时间比较,如果两个时间的差值超过1天,就执行cron.daily工作。 3. 执行这个工作只能在03:00-22:00之间。 4. 执行工作时强制延迟时间为5分钟,再随机延迟0-45分钟时间。 5. 使用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命令是一个系统命令。
顶部
收展
底部
[TOC]
目录
Linux进程介绍
Linux进程管理命令
Linux工作管理
Linux任务调度:循环执行定时任务命令crontab
Linux任务调度:定时执行某次任务命令at
Linux任务调度:重新执行错过的定时任务命令anacron
Linux系统资源监控分析
Linux端口查询:netstat和lsof
相关推荐
Linux文件目录管理
Linux打包压缩
Linux文本处理
Linux软件安装
Linux用户和用户组管理
Linux文件系统管理