我想了解如何纳克朗有效(在 Fedora 中)。我有三个相关问题。我对下面的声明感到困惑anacrontab 手册:
START_HOURS_RANGE 变量定义可以运行计划作业的时间间隔(以小时为单位)。如果错过了这个时间间隔(例如由于断电),那么当天就不会执行计划的作业。
第一个主要问题是:“时间间隔被错过”这句话是什么意思?
我知道有软件时钟和硬件时钟,而且软件时钟取决于硬件时钟。据我了解,如果断电时间足够长,那么在启动系统后,必须从软件时钟调整硬件时钟,因此必须独立调整软件时钟(手动或自动)。
那么,第二个问题来了:这是否意味着,如果anacron应该在系统宕机的时候运行,而在启动后——在anacron运行的时间内——它仍然没有适当的时间,那么anacron在想现在还不是运行的时间(因此它不会运行)?
我意识到 anacron 本身并不是一个守护进程,正如这个堆栈交换答案。作为关于 anacron 的 Fedora 文档状态,anacron 作业由守护进程运行crond
。此外,还指出 anacron 作业将在系统启动后立即运行。
那么,第三个问题来了:如果第二个问题的答案是“是”,那么在运行anacron之前是否可以调整系统时间crond
,因此anacron会运行(因为那时时间是正确的)?
更新
也许让我们举个例子:假设我已经安排 Fedora 上的 anacron 每天运行一些作业——并且系统通常一直在运行。我保留了Fedora提供的默认配置,即anacron将运行仅有的在 3:05 和 22:50 的时间范围内(我希望我正确理解手册所说的内容)——当然,如果系统将在这个时间范围内运行。现在,让我们假设从 2:30 到 4:30 断电,因此 Fedora 在 4:30 开始启动。让我们假设 crond 两分钟后(4:32)运行 anacron,就像往常一样,并假设当时系统时钟仍然没有正确设置。 Anacron 看到系统时钟设置为 2:32,因此它认为“现在还不是运行我的作业的时间,因为我计划最早在 3:05 运行它们”。
由此我了解到,当天不会运行(下次运行是从 3:05 开始的第二天)。
现在是另一种情况:假设系统时间调整为 2:31,即 crond 运行 anacron 前一分钟。当它在 4:32(现在,正确的时间)运行 anacron 时,anacron 看到时间并认为“好吧,所以我必须运行我的作业。让我们等待我的配置中定义的随机延迟并运行作业”。它等待之间的随机延迟4:324:37 和5:175:22 然后它就会运行它的工作。
我对吗?
答案1
按顺序回答您的问题:
anacron
如果在此期间不调用,则会错过该间隔。如果它没有被调度或者机器在它被调用时没有运行,它就不会被调用。这与时钟关系不大,而与是否cron
有时间实际运行有关anacron
。当
cron
(或管理员)调用时anacron
,如果需要,它将运行每个计划的作业,即,如果作业上次运行的时间超过了文件中指定的天数anacrontab
。如果anacron
不调用,它将不会运行任何计划的作业。是否anacron
在系统启动时执行取决于本地配置。如果
anacron
调用,例如通过cron
作业调用,它将查看当前系统时间并将其与每个作业保存的状态文件进行比较。如果该时间差大于anacrontab
配置文件为作业指定的时间,anacron
则将运行该作业。
这三个答案本质上是相同的。 如果条件正确(该作业在一定时间内未运行), anacron
将从其运行作业。往往是从工作开始的。这可能是在系统启动时以及每个午夜或其他时间(可能每天一次)运行的作业。使用的 Linux可能会以不同的方式调用。如果不执行,显然不会做任何事情。anacrontab
anacron
cron
systemd
anacron
anacron
如果系统时钟设置不正确,这可能会影响作业是否运行,具体取决于运行时anacron
和上次运行作业时时钟的错误程度。