使用 anacron 改善 crontab

与其手动执行重复性任务,不如让 Linux 为您完成。
143 位读者喜欢这个。
Command line prompt

Opensource.com

在 2021 年,人们喜欢 Linux 的理由比以往任何时候都多。在这个系列中,我将分享使用 Linux 的 21 个不同理由。自动化是使用 Linux 的最佳理由之一。

我最喜欢 Linux 的一点是它愿意为我工作。与其执行耗费时间、容易出错或我可能忘记的重复性任务,不如安排 Linux 为我完成这些任务。

为自动化做准备

“自动化”一词既令人向往,又令人望而生畏。我发现模块化地处理它很有帮助。

1. 您想让什么事情发生?

首先,要知道您想要产生什么结果。您是要为图像添加水印吗?从杂乱的目录中删除文件?执行重要数据的备份?为自己明确定义任务,以便您知道目标是什么。如果您发现自己每天都在做任何任务,更不用说每天不止一次,那么它可能成为自动化的候选对象。

2. 了解您需要的应用程序

将大型任务分解为小组件,并学习如何以可重复和可预测的方式手动生成每个结果。Linux 上可以完成的许多事情都可以通过脚本编写完成,但重要的是要认识到您当前的局限性。学习如何自动化调整多个图像的大小以便可以方便地通过电子邮件发送,与使用机器学习为您的每周新闻通讯生成精美的艺术品之间存在天壤之别。前者您可以在一个下午学会,而后者可能需要数年时间。但是,我们都必须从某个地方开始,所以从小处着手,并始终关注改进的方法。

3. 自动化它

在 Linux 上使用自动化工具使其定期发生。这是本文涵盖的步骤!

要自动化某些事情,您需要一个自动化任务的脚本。在测试时,最好保持简单,因此本文自动化的任务是在 /tmp 目录中创建一个名为 hello 的文件

#!/bin/sh

touch /tmp/hello

将该简单脚本复制并粘贴到文本文件中,并将其命名为 example

Cron

每个 Linux 安装都自带的内置自动化解决方案是 cron 系统。Linux 用户倾向于将 cron 泛指为用于调度任务(通常称为“cron 作业”)的方法,但有多个应用程序提供 cron 的功能。最通用的是 cronie;它的优点是它不假设您的计算机始终处于开机状态,就像为系统管理员设计的历史 cron 应用程序那样。

验证您的 Linux 发行版提供了哪个 cron 系统。如果它不是 cronie,您可能可以从您的发行版的软件存储库中安装 cronie。如果您的发行版没有 cronie 的软件包,您可以改用旧的 anacron 软件包。anacron 命令包含在 cronie 中,因此无论您如何获取它,您都希望确保您的系统上可以使用 anacron 命令,然后再继续。Anacron 可能需要管理员 root 权限,具体取决于您的设置。

$ which anacron
/usr/sbin/anacron

Anacron 的工作是确保您的自动化作业定期执行。为此,anacron 检查以找出上次作业运行的时间,然后检查您告知它运行作业的频率。

假设您设置 anacron 每五天运行一次脚本。每次您打开计算机或将其从睡眠状态唤醒时,anacron 都会扫描其日志以确定是否需要运行作业。如果作业在五天或更长时间前运行,则 anacron 会运行该作业。

Cron 作业

许多 Linux 系统都捆绑了一些供 cron 执行的维护作业。我喜欢将我的作业与系统作业分开,因此我在我的主目录中创建一个目录。具体来说,有一个名为 ~/.local 的隐藏文件夹(“local”的意思是它为您的用户帐户定制,而不是为您的“全局”计算机系统定制),因此我创建子目录 etc/cron.daily 以镜像 cron 在我系统上的常用主目录。您还必须创建一个假脱机目录来跟踪上次运行作业的时间。

$ mkdir -p ~/.local/etc/cron.daily ~/.var/spool/anacron

您可以将任何您想要定期运行的脚本放入 ~/.local/etc/cron.daily 目录中。现在将 example 脚本复制到该目录中,并使用 chmod 命令将其标记为可执行

$ cp example ~/.local/etc/cron.daily
$ chmod +x ~/.local/etc/cron.daily/example

接下来,设置 anacron 以运行位于 ~/.local/etc/cron.daily 目录中的任何脚本。

Anacron

默认情况下,cron 系统的很大一部分被认为是系统管理员的领域,因为它通常用于重要的底层任务,例如轮换日志文件和更新证书。本文中演示的配置是为设置个人自动化任务的普通用户设计的。

要配置 anacron 运行您的 cron 作业,请在 /.local/etc/anacrontab 创建一个配置文件

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
1  0  cron.mine    run-parts /home/tux/.local/etc/cron.daily/

此文件告诉 anacron 每天(即每天)运行在 ~/.local/etc/cron.daily 中找到的所有可执行脚本 (run-parts),延迟时间为零分钟。有时,会使用几分钟的延迟,这样您的计算机在您登录后不会立即受到所有可能任务的冲击。不过,这些设置适用于测试。

cron.mine 值是进程的任意名称。我称之为 cron.mine,但您可以将其称为 cron.personalpenguin 或您想要的任何名称。

验证您的 anacrontab 文件的语法

$ anacron -T -t ~/.local/etc/anacrontab \
-S /home/tux/.var/spool/anacron

沉默意味着成功。

将 anacron 添加到 .profile

最后,您必须确保 anacron 使用您的本地配置运行。因为您是以普通用户而不是 root 用户身份运行 anacron,所以您必须将其定向到您的本地配置——告诉 anacron 要做什么的 anacrontab 文件,以及帮助 anacron 跟踪自上次执行每个作业以来经过了多少天的假脱机目录

anacron -fn -t /home/tux/.local/etc/anacrontab \
-S /home/tux/.var/spool/anacron

-fn 选项告诉 anacron 忽略时间戳,这意味着您正在强制它运行您的 cron 作业,无论如何。这仅用于测试目的。

测试您的 cron 作业

现在一切都设置好了,您可以测试作业了。从技术上讲,您可以在不重启的情况下进行测试,但重启最有意义,因为这就是它旨在处理的:中断和不规则的登录会话。花点时间重启您的计算机,登录,然后查找测试文件

$ ls /tmp/hello
/tmp/hello

假设该文件存在,则您的示例脚本已成功执行。您现在可以从 ~/.profile 中删除测试选项,保留此作为您的最终配置

anacron -t /home/tux/.local/etc/anacrontab \
-S /home/tux/.var/spool/anacron

使用 anacron

您已经配置了您的个人自动化基础设施,因此您可以将您希望计算机为您管理的任何脚本放入 ~/.local/etc/cron.daily 目录中,它将按计划运行。

作业的运行频率取决于您。您的示例脚本每天执行一次。显然,这取决于您的计算机在任何给定日期是否已开机并唤醒。如果您在星期五使用计算机,但在周末将其搁置,则脚本不会在星期六和星期日运行。但是,在星期一,脚本将执行,因为 anacron 将知道至少已经过去了一天。您可以将每周、每两周甚至每月的目录添加到 ~/.local/etc 以安排各种间隔。

添加新间隔

  1. 将目录添加到 ~/.local/etc(例如,cron.weekly)。
  2. ~/.local/etc/anacrontab 中添加一行以运行新目录中的脚本。对于每周间隔,配置将是
    7 0 cron.mine run-parts /home/tux/.local/etc/cron.weekly/

    0 值可以可选地是几分钟,以便礼貌地延迟脚本的启动)。

  3. 将您的脚本放在 cron.weekly 目录中。

欢迎来到自动化的生活方式。您不会感觉到,但您即将变得更加高效。

接下来阅读什么
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算机行业工作,经常同时工作。

2 条评论

对于您经常做的事情,最简单的方法是创建一个别名,方法是将此行放在您的 .bashrc 文件中

alias example='touch /tmp/hello'

您甚至可以通过用分号分隔与脚本行对应的一系列命令来将它们串在一起。

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.