电脑关机任务管理器

发布时间: 2023-04-16 17:25 阅读: 文章来源:转载

不同于 cron,anacron 是Linux系统中的一个普通的程序,它是由cron或者systemd驱动的,它的最小运行周期为天。anacron 的工作方式与cron不同,它假定计算机不是24小时运行的。比如我们需要在凌晨 3 点 执行数据库备份,但是此时我们已经关机睡觉了。然而如果备份任务是由anacron驱动的,那么我们可以放心,因为第二天打开计算机时,备份脚本将会执行

cron 和 anacron 的主要区别如下,可以看出 Anacron 并不是取代crontab,而是对crontab的一种补充。

cron

anacron

进程特点

系统服务

普通程序

适合对象

适合7x24小时运行的服务器

适合非7x24小时运行的服务器

最小运行周期

分钟

关机开机时

错过了就错过了

如果错过了,开机后补充运行

权限

普通用户和 root 用户都可以使用

只有 root 用户可以使用

这张来自(https://docs.rockylinux.org/zh/guides/automation/anacron/)的示意图形象的描述了它们之间的关系:

不过这张示意图应该存在几个个错误:(1)cron.daily、cron.monthly和cron.weekly目录下的脚本是由anacron启动的;(2)anacron是由cron服务配置文件 /etc/cron.d/0hourly 中的任务/etc/cron.hourly 启动的,这些在下文中都有说明。

cron 和 anacron

配置文件

首先看看anacron相关的配置文件,注意cronie-anacron提供了anacron工具。

# rpm -ql cronie-anacron/etc/anacrontab/etc/cron.hourly/0anacron/var/spool/anacron/var/spool/anacron/cron.daily/var/spool/anacron/cron.monthly/var/spool/anacron/cron.weekly/usr/lib/.build-id/usr/lib/.build-id/0e/usr/lib/.build-id/0e/6b094fa55505597cb69dc5a6b7f5f30b04d40f/usr/sbin/anacron/usr/share/man/man5/anacrontab.5.gz/usr/share/man/man8/anacron.8.gz

/etc/anacrontab 配置文件列出了需要由anacron调度执行的任务。

# cat /etc/anacrontab# /etc/anacrontab: configuration file for anacron# See anacron(8) and anacrontab(5) for details.SHELL=/bin/shPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=root# the maximal random delay added to the base delay of the jobsRANDOM_DELAY=45# the jobs will be started during the following hours onlySTART_HOURS_RANGE=3-22#period in daysdelay in minutesjob-identifiercommand15cron.dailynice run-parts /etc/cron.daily725cron.weekly nice run-parts /etc/cron.weekly@monthly 45 cron.monthlynice run-parts /etc/cron.monthly

首先说明一下其中两个参数的含义:

参数

含义

RANDOM_DELAY

在任务设置的延时的基础上增加的最大的随机延迟

START_HOURS_RANGE

任务启动时间范围 3:00~22:00

我们可以使用以下格式添加任务

period in daysdelay in minutesjob-identifiercommandperiod - 这是任务执行的频率,以天为单位,或者以@daily, @weekly, 或@monthly表示每天、每周或每月一次。你也可以使用数字。1-每天,7-每周,30-每月,N-天数。delay - 这是执行任务前要等待的分钟数。job-id - 任务唯一标识符,在 /var/spool/anacron 目录下会为每个任务创建一个以这个唯一标识符命名的文件,文件的内容是这个任务最后一次执行的日期,例如:# cat /var/spool/anacron/cron.daily20221212# cat /var/spool/anacron/cron.weekly20221212# cat /var/spool/anacron/cron.monthly20221128

anacron 就是靠这个日期来判断是否应该运行某个任务,下面来看看详细情况:

anacron 运行时首先检查这个任务是否在 period字段 中指定的期限内运行过。如果没有,那么在等待 delay 字段中指定的分钟数后,它将执行命令字段中指定的命令。任务运行完成后,它将在/var/spool/anacron/job-identifier 时间戳文件中记录下日期。谁启动了anacron?

还有一个问题,谁启动了anacron?答案是cron服务。

# cat /etc/cron.d/0hourly# Run the hourly jobsSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=root01 * * * * root run-parts /etc/cron.hourly

cron 服务每小时第1分钟都会运行/etc/cron.hourly目录中的脚本,而/etc/cron.hourly/0anacron 脚本启动了anacon程序,见/etc/cron.hourly/0anacron文件的最后一行。

# cat /etc/cron.hourly/0anacron#!/bin/sh# Check whether 0anacron was run today alreadyif test -r /var/spool/anacron/cron.daily; thenday=`cat /var/spool/anacron/cron.daily`fiif [ `date +%Y%m%d` = "$day" ]; thenexit 0fi# Do not run jobs when on battery poweronline=1for psupply in AC ADP0 ; dosysfile="/sys/class/power_supply/$psupply/online"if [ -f $sysfile ] ; thenif [ `cat $sysfile 2>/dev/null`x = 1x ]; thenonline=1breakelseonline=0fifidoneif [ $online = 0 ]; thenexit 0fi/usr/sbin/anacron -s

这也可以从crond的日志中看出来

# journalctl -u crond-- Logs begin at Sat 2022-12-10 22:32:01 EST, end at Mon 2022-12-12 09:31:01 EST. --Dec 10 23:01:01 racknerd-855048 CROND[603441]: (root) CMD (run-parts /etc/cron.hourly)anacron命令

我们也可以直接运行 anacron 命令,通常使用的选项包括:

选项

说明

-f

执行所有作业,忽略时间戳

-u

将时间戳更新到当前时间,而不执行任何操作

-T

测试配置文件/etc/anacrontab 的有效性

•••展开全文
相关文章