关于 cron 和 anacron 的混淆(为 rsnapshot 设置备份计划)

关于 cron 和 anacron 的混淆(为 rsnapshot 设置备份计划)

我正在尝试在运行 Ubuntu 16.04 LTS 的笔记本电脑上使用 rsnapshot 设置一个不太复杂的备份计划。计划是保留两个每日备份和 24 小时备份。我想这是我第一次使用 cron 或 anacron 做任何事情。所以我不仅有一个问题,而且有几个问题让我感到困惑,我很高兴能得到一些答案,因为我发现了一些关于某些观点的看似矛盾的信息,但无法找到任何明确的解决方案。

由于我对很多事情都感到困惑,我不得不说了好多话来澄清我的问题。希望您能耐心听我说完。对于 TL;DR 人群,我已用粗体字体突出显示了实际问题。

我的 crontab 如下所示:

    # m h dom mon dow user  command
    17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
    25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
    47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
    52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
    #

并且 anacrontab 如下所示:

    # These replace cron's entries
    1   5   cron.daily  run-parts --report /etc/cron.daily
    7   10  cron.weekly run-parts --report /etc/cron.weekly
    @monthly    15  cron.monthly    run-parts --report /etc/cron.monthly

这是全新安装 Ubuntu 16.04 桌面版后的标准。

由于我假设系统通常设置了一堆其他的 cron 和 anacron 作业,所以我认为最好不要弄乱这个标准配置。

然而,我对两者协同工作的方式感到有些困惑,并且担心它们与我计划的备份计划协同工作时可能会出现麻烦。

首先,我理解 cron 是一个守护进程,它严格按照 crontab 中的计划运行其任务如果计算机在指定时间运行。否则工作无法完成。好的。很简单。

然后是 anacron,我读过一些看似矛盾的信息。最简单的信息是“即使计算机没有在指定时间打开,anacron 也可以执行计划任务。然后,只要计算机再次打开,它们就会执行。因此,它适合不全天候运行的台式机。” 好吧。听起来不错。看来这就是我想要的。

在一些地方我读到 anacron 是一个“守护进程”,而在其他地方(就像 askubuntu.com 上一样) 指出 anacron 实际上是作为 cronjob 运行的(如上面的标准 crontab 所示)。或者根据不同的设置,两者是否都可以?我怎么知道?

然后有信息说“anacron 不执行每小时的工作,也不执行任何少于一天的工作”。这似乎符合上述 crontab 和 anacrontab 的标准设置,在全新安装 Ubuntu 16.04 后,只有每日、每小时和每月的工作会转发到 anacron,而 /etc/cron.hourly 由 cron 直接处理,而且据我所知,每个 anacrontab 条目中的前两个选项卡指定了计划任务的天数(例如,在本例中,/etc/cron.daily 为 1 天,/etc/cron.weekly 为 7 天 - 似乎很合适)和当天第一次系统启动后的等待时间(我猜是在 anacron 启动后;因此 cron.daily 为 5 分钟,cron.weekly 为 10 分钟),这也很有意义。好的。

然而,在德语 Ubuntu Wiki 上(wiki.ubuntuusers.de我现在读了那个 anacron从 Ubuntu 14.04 开始执行小时工作。但是没有关于如何做到这一点的描述,而且我也没有在其他地方找到任何这样的陈述,而且我不知道如何在 anacrontab 中指定每小时的工作。所以另一个问题是:从 Ubuntu 14.04 版开始,anacron 可以用于执行小时工吗?如果可以,如何使用?

对我来说,这里出现的第一个真正令人费解的问题是:如果 cronjobs 只在指定的时间运行,并且设置了这些不同的 cronjobs 来运行 anacron 来执行 /etc/cron.daily、/etc/cron.weekly 和 /etc/cron.monthly 中的任务,分别在 6:25、6:47 和 6:52 -那么如果电脑在早上那么早的时候实际上从未打开过会怎么样?那么 anacron 实际上从未运行过还是怎么回事?如果 anacron 依赖于 cron,那么从某种意义上来说 anacron 如何“比 cron 做得更好”(即,如果电脑在中间关闭,它会比计划的更晚执行任务)?

这些就是我对 cron 和 anacron 的问题。

然后我对 rsnapshot 本身也有一些疑问,我想我最好将其转达至一个新的问题主题。

感谢您的阅读,任何明确的答案我们都非常感谢。

答案1

Anacron 不是守护进程;它只是一个由 cron 运行的程序。这在https://help.ubuntu.com/community/CronHowto,靠近底部,标题下如何设置 Anacron根据那篇文章,“anacron 在每次启动、唤醒、插入插件时以及每天早上 7:30 运行。”

引用该文章的这一部分:

  • 有一个 Upstart 任务,位于 /etc/init/anacron.conf 中,它运行 /etc/anacrontab 中的所有作业。它设置为在启动时运行。

  • 有一个 cron.d 文件(/etc/cron.d/anacron),它导致 Upstart 任务每天早上 7:30 启动。

  • 有一个文件 /etc/apm/event.d/anacron,当笔记本电脑插入交流电源或被唤醒时,它会启动 Upstart 任务。

至于 anacron 的最新版本是否可以处理每小时的作业:我不知道,但它似乎没什么用。如果您查看 /etc/crontab,您将看到 /etc/cron.hourly 中的作业每小时由 cron 运行,无论是否存在名为 /usr/sbin/anacron 的可执行文件;只有在没有安装可执行 anacron 时,cron 才会运行 /etc/cron.daily、/etc/cron.weekly 和 /etc/cron.monthly 中的文件。

答案2

据我了解.... anacron 不是一个守护进程而是由 cron 运行。cron 在启动时运行并运行 anacron。anacron 检查其编程的某些东西是否错过了其计划并运行它。

既然我是这样看的...看来你会希望在 anacron 中设置每日作业。至于 anacron 中的每小时作业...我还没有看到任何关于如何设置的信息,所以我会将每小时备份放在 cron 中。

我知道这解释得不是很好,但是……我想这也让我很困惑。我相信这里有人能给出更好、更令人满意的答案,但我想我会概括一下。

相关内容