使用 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 在我系统上的通常主目录。 你还必须创建一个 spool 目录来跟踪上次运行作业的时间。

$ 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 跟踪自上次执行每个作业以来已经过了多少天的 spool 目录

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'

你甚至可以通过用分号分隔来将与脚本行相对应的一系列命令连接在一起。

好主意。 有很多种,有时是微妙的方式,可以使 Linux 为你更好、更快地工作。

回复 作者 Greg P

© . All rights reserved.