15.4 【Linux】可唤醒停机期间的工作任务

简介: 15.4 【Linux】可唤醒停机期间的工作任务

15.4.1 什么是 anacron

anacron 并不是用来取代 crontab 的,anacron 存在的目的就在于我们上头提到的,在处理非24 小时一直启动的 Linux 系统的 crontab 的执行! 以及因为某些原因导致的超过时间而没有被执行的调度工作。


其实 anacron 也是每个小时被 crond 执行一次,然后 anacron 再去检测相关的调度任务有没有被执行,如果有超过期限的工作在, 就执行该调度任务,执行完毕或无须执行任何调度时,anacron 就停止了。


15.4.2 anacron 与 /etc/anacrontab

anacron 其实是一支程序并非一个服务!这支程序在 CentOS 当中已经进入 crontab 的调度,同时 anacron 会每个小时被主动执行一次。


基本上, anacron 的语法如下:


在我们的 CentOS 中,anacron 的进行其实是在每个小时都会被抓出来执行一次, 但是为了担心 anacron 误判时间参数,因此 /etc/cron.hourly/ 里面的 anacron 才会在文件名之前加个 0(0anacron),让 anacron 最先进行!就是为了让时间戳记先更新!以避免 anacron 误判crontab 尚未进行任何工作的意思。


接下来看一下 anacron 的配置文件: /etc/anacrontab 的内容好了:


我们拿 /etc/cron.daily/ 那一行的设置来说明好了。那四个字段的意义分别是:


天数:anacron 执行当下与时间戳记 (/var/spool/anacron/ 内的时间纪录档) 相差的天数,若超过此天数,就准备开始执行,若没有超过此天数,则不予执行后续的指令。


延迟时间:若确定超过天数导致要执行调度工作了,那么请延迟执行的时间,因为担心立即启动会有其他资源冲突的问题吧!


工作名称定义:这个没啥意义,就只是会在 /var/log/cron 里头记载该项任务的名称这样!通常与后续的目录资源名称相同即可。


实际要进行的指令串:通过 run-parts来处理的!


根据上面的配置文件内容,我们大概知道 anacron 的执行流程应该是这样的 (以 cron.daily为例):


1. 由 /etc/anacrontab 分析到 cron.daily 这项工作名称的天数为 1 天;

2. 由 /var/spool/anacron/cron.daily 取出最近一次执行 anacron 的时间戳记;

3. 由上个步骤与目前的时间比较,若差异天数为 1 天以上 (含 1 天),就准备进行指令;

4. 若准备进行指令,根据 /etc/anacrontab 的设置,将延迟 5 分钟 + 3 小时 (看START_HOURS_RANGE 的设置);

5. 延迟时间过后,开始执行后续指令,亦即“ run-parts /etc/cron.daily ”这串指令;

6. 执行完毕后, anacron 程序结束。


最后总结一下crond与anacron的关系:


1. crond 会主动去读取 /etc/crontab, /var/spool/cron/, /etc/cron.d/ 等配置文件,并依据“分、时、日、月、周”的时间设置去各项工作调度;

2. 根据 /etc/cron.d/0hourly 的设置,主动去 /etc/cron.hourly/ 目录下,执行所有在该目录下的可执行文件;

3. 因为 /etc/cron.hourly/0anacron 这个指令档的缘故,主动的每小时执行 anacron ,并调用 /etc/anacrontab 的配置文件;

4. 根据 /etc/anacrontab 的设置,依据每天、每周、每月去分析 /etc/cron.daily/,/etc/cron.weekly/, /etc/cron.monthly/ 内的可执行文件,以进行固定周期需要执行的指令。

也就是说,如果你每个周日的需要执行的动作是放置于 /etc/crontab 的话,那么该动作只要过期了就过期了,并不会被抓回来重新执行。但如果是放置在 /etc/cron.weekly/ 目录下,那么该工作就会定期,几乎一定会在一周内执行一次~如果你关机超过一周,那么一开机后的数个小时内,该工作就会主动的被执行。


15.5 重点回顾

系统可以通过 at 这个指令来调度单一工作的任务!“at TIME”为指令下达的方法,当 at进入调度后, 系统执行该调度工作时,会到下达时的目录进行任务;


at 的执行必须要有 atd 服务的支持,且 /etc/at.deny 为控制是否能够执行的使用者帐号;

通过 atq, atrm 可以查询与删除 at 的工作调度;

batch 与 at 相同,不过 batch 可在 CPU 工作负载小于 0.8 时才进行后续的工作调度;系统的循环例行性工作调度使用 crond 这个服务,同时利用 crontab -e 及 /etc/crontab 进行调度的安排;

crontab -e 设置项目分为六栏,“分、时、日、月、周、指令”为其设置依据;

/etc/crontab 设置分为七栏,“分、时、日、月、周、执行者、指令”为其设置依据;

anacron 配合 /etc/anacrontab 的设置,可以唤醒停机期间系统未进行的 crontab 任务!


相关文章
|
1月前
|
数据可视化 Linux 测试技术
Linux系统之部署nullboard任务管理工具
【4月更文挑战第4天】Linux系统之部署nullboard任务管理工具
82 11
|
1月前
|
存储 前端开发 Linux
Linux系统之部署ToDoList任务管理工具
【4月更文挑战第1天】Linux系统之部署ToDoList任务管理工具
84 1
|
1月前
|
运维 监控 Linux
linux脚本自动化运维任务
Linux自动化运维通过脚本提升效率,涵盖服务管理(启停服务、异常恢复)、系统监控(资源警报)、日志管理(清理分析)、备份恢复、补丁更新、自动化部署(如Ansible)、网络管理、定时任务(cron)和故障排查。结合shell、Python及工具,形成高效运维体系。
44 3
|
1月前
|
监控 Linux 编译器
Linux C++ 定时器任务接口深度解析: 从理论到实践
Linux C++ 定时器任务接口深度解析: 从理论到实践
128 2
|
1月前
|
Linux
探索Linux xargs命令:如何使用它来传递参数和执行任务
探索Linux xargs命令:如何使用它来传递参数和执行任务
47 1
|
1月前
|
Unix Shell Linux
在Unix/Linux操作系统中,Shell脚本广泛用于自动化任务
在Unix/Linux操作系统中,Shell脚本广泛用于自动化任务
37 2
|
1月前
|
存储 Linux Shell
Linux中的计划任务—Crontab调度一次性执行的任务at/batch
Linux中的计划任务—Crontab调度一次性执行的任务at/batch
136 0
|
1月前
|
关系型数据库 Linux Shell
Linux|奇怪的知识|一次性任务at命令的使用
Linux|奇怪的知识|一次性任务at命令的使用
48 0
|
7月前
|
Linux
linux 挂起后无法唤醒屏幕
linux 挂起后无法唤醒屏幕
|
8月前
|
存储 算法 Linux
《Linux操作系统编程》第二章 进程运行与调度: 了解进程的定义与特征、进程的状态与切换、进程管理的数据结构、进程的创建与终止、阻塞与唤醒、挂起与激活以及处理机调度的相关概念
《Linux操作系统编程》第二章 进程运行与调度: 了解进程的定义与特征、进程的状态与切换、进程管理的数据结构、进程的创建与终止、阻塞与唤醒、挂起与激活以及处理机调度的相关概念
159 0