使用 crontab 自动化命令行软件的更新

915 阅读3分钟

crontab 是 UNIX 系统上周期性调度任务的任务调度器。其名字是 chronic table(周期性时间表)的缩写。UNIX 系统上的每一个用户都有其自己的 "crontab"。

编辑 crontab 文件。

通过执行 crontab -e,你可以打开你登入的用户的 crontab。下面的插图显示了我的 crontab 的内容。

crontab 的编辑器
crontab 的编辑器

如你所见,我在用 crontab 来自动化 home brew, npmarcanist 的更新(Arcanist 是代码审查、项目计划、代码托管套件:Phabricator 的一个命令行代码审查工具)。

左侧的如 0 0 * * * 这样的数字序列代表「每天 00:00 AM」。这些数字序列将设置右侧命令的执行时间。你可以在 crontab.guru 获得一个用户友好的介面来设置这串数字。

右侧的命令仅支持少部分环境变量。你可以想象一个没有任何 *rc 文件加载的 shell 环境,那就是 crontab 所拥有的。

因为被 crontab 执行的命令所拥有的是这样的 shell 环境,连 PATH 变量也没有被设置,所以你必须写下要执行命令的完全路径。

被 crontab 执行的命令可以是一个 UNIX 系统随行的命令行命令,也可以是你自己编写的一段脚本。如果你要执行一个需要 root 权限的系统命令,那么你需要保证你要执行的命令在 sudoers 文件里面。如果你要在 crontab 中执行一个 shell 脚本,那么你需要使用 chmod +x 你脚本的名字 来让你的脚本有执行权限。

保存 crontab 文件

在不同的编辑器上,保存 crontab 文件的方法各不相同。在 VIM 中,你可以使用 :w⏎ 来保存。如果你在使用 macOS,那么当你保存完文件后将会遇到下面这个对话框,你需要点击「OK」来让你的系统接受你的修改。

macOS 的提示
macOS 的提示

通知邮件

每一次一个命令被 crontab 所执行,你都会得到一封邮件。你可以在命令行环境以 mail 命令查看这封邮件。

crontab 邮件
crontab 邮件

然后每天你来到你的桌前,只需要打开你的命令行终端,然后输入 mail,然后你就可以知道你哪些命令行软件更新了。如你所见,今天我电脑上的 npm 更新了。

crontab 邮件内容
crontab 邮件内容

改变通知邮件目的地

默认下,每一个被 crontab 执行的命令都会发送一封邮件给设置这个命令的用户。但是你可以通过在 crontab 文件的顶部加入如下一行来改变目的地的地址(输入 crontab -e 打开 crontab 文件)。

MAILTO=your@emailaddress.com

你也可以通过设置 MAILTO"" 来关闭邮件通知。具体如下列代码所示:

MAILTO=""

阅读 crontab 的手册

通过执行 man crontab, 你可以查看 crontab 的细节使用方法.

crontab 手册
crontab 手册

一些资源

我的 macOS 用 crontab 脚本: WeZZard/com.wezzard.crontab.macos

我的开发用 crontab 脚本: WeZZard/com.wezzard.crontab.dev


原文刊发于本人博客(英文)

本文使用 OpenCC 进行繁简转换