Linux 使用 cron 调度任务的技巧

使用这个简单而强大的 Linux 命令行工具来调度备份、文件清理和其他任务。下载我们的全新 cron 速查表。
41 位读者喜欢这篇文章。
Linux keys on the keyboard for a desktop computer

在计算机上按规律和可预测的计划进行操作非常重要。这很重要,因为作为人类,我们有时可能不擅长可靠地记住要做的事情,因为我们可能会分心,脑子里想得太多,或者我们正在度假。计算机非常擅长按计划做事,但人类必须先对计算机进行编程,然后计算机才能采取行动。

在某种程度上,cron 系统是对编程的简单而初步的介绍。您只需编辑一个文件就可以让您的计算机做您想做的事情。您甚至不必知道该文件保存在哪里。您只需输入一个简单的命令,输入您希望计算机遵循的“配方”,然后保存您的工作。从那时起,您的计算机将在指定的时间执行您的指令,直到被告知停止。

根据设计,cron 不是一个复杂的系统。以下是您需要了解的有关它的信息。

什么是 cron?

cron 命令在 Linux 和 Unix 中非常普遍,并且经常被模仿和重新发明,以至于它几乎成为按计划发生的事情的通用术语。它是一种自动化形式,尽管它有不同的实现(Dillon 的 cron、Vixie 的 cron、chrony 等),以及像 anacronsystemd 定时器 这样的变体,但几十年来,语法和工作流程基本上保持不变。

Cron 在“假脱机”系统上工作,很像打印机和电子邮件。如果您不知道打印机和电子邮件使用假脱机,那也没关系,因为假脱机文件的重点是您不应该过多考虑它。在 Linux 系统上,目录 /var/spool 被设计为重要但低级文件的中心枢纽,用户不应该直接与之交互。在 /var/spool 中管理的假脱机之一是 cron 表,或简称为“crontab”。Linux 系统上的每个用户(包括您自己)都有一个 crontab。用户可以编辑、查看和删除自己的 crontab。此外,用户可以使用他们的 crontab 来调度任务。cron 系统本身会监视 crontab,并确保 crontab 中列出的任何作业都在指定的时间执行。

编辑 cron 设置

您可以使用 crontab 命令以及 -e(表示编辑)选项来编辑您的 crontab。默认情况下,大多数系统会调用 vim 文本编辑器。如果您像我一样不使用 Vim,那么您可以在您的 ~/.bashrc 文件中为自己设置不同的编辑器。我将其设置为 Emacs,但您也可以尝试 NanoKate 或您碰巧喜欢的任何编辑器。EDITOR 环境变量定义了您在终端中使用的文本编辑器,而 VISUAL 变量定义了您在图形模式下使用的编辑器

export EDITOR=nano
export VISUAL=kate

使用您的新设置刷新您的 shell 会话

$ source ~/.bashrc

现在您可以使用您喜欢的编辑器编辑您的 crontab

$ crontab -e

调度任务

cron 系统本质上是一个日历系统。您可以使用五个不同的属性告诉 cron 您希望作业运行的频率:分钟、小时、日期、月份、星期几。这些属性的顺序是严格的,不一定直观,但您可以将它们视为过滤器或掩码。默认情况下,您可能会认为所有内容都设置为总是每个。此条目将在一年中每天每小时的每分钟顶部运行 touch /tmp/hello

* * * * * touch /tmp/hello

您可以通过为每个属性设置特定定义来限制此包罗万象的计划。要使作业在每小时的半小时标记处运行,请将分钟设置为 30

30 * * * * touch /tmp/hello

您可以使用特定的小时进一步约束此指令。此作业每天早上 3:30 运行

30 3 * * * touch /tmp/hello

您也可以使作业仅在每个月的第一天运行

30 3 1 * * touch /tmp/hello

您可以使用 1 表示一月到 12 表示十二月来设置月份,您可以使用 0 表示星期日到 6 表示星期六来设置日期。此作业在四月的每个星期一的 3:15 运行

15 3 * 4 1 touch /tmp/hello

设置增量

所有这些设置都完全匹配一个值。您还可以使用 cron 表示法在设定的时间段后运行作业。例如,您可以每 15 分钟运行一次作业

*/15 * * * * touch /tmp/hello

您可以每三天在上午 10 点运行一次作业

* 10 */3 * * touch /tmp/hello

您可以每六小时运行一次作业

* */6 * * * touch /tmp/hello

Cron 简写

现代 cron 实现添加了常用计划的便捷简写。这些是

  • @hourly
  • @daily
  • @weekly
  • @monthly
  • @yearly 或 @annually

列出 cron 作业

使用 crontab 命令,您可以查看计划的 cron 作业列表

$ crontab -l
15 3 * 4 1 touch /tmp/hello

删除 crontab

当您完成 crontab 后,您可以使用 -r 选项删除它

$ crontab -r -i

-i 选项代表交互式。它会在删除文件之前提示您进行确认。

cron 可以做什么

知道如何使用 cron 是一回事,但知道用它做什么又是另一回事。典型的用例是一个好的备份计划。如果您的计算机大部分时间或整天整夜都开着,那么您可以安排例行备份重要的分区。我每天凌晨 3 点在我的主数据分区上运行一个名为 rdiff-backup 的备份应用程序

$ crontab -l | grep rdiff
* 3 * * * rdiff-backup /data/ /vault/

另一个常见的用途是系统维护。在我的 Slackware 桌面电脑上,我每周五下午更新我的本地存储库目录

$ crontab -l | grep slack
* 14 * * 5 sudo slackpkg update

我也可以每三天在 15:00 运行一个 Ansible 脚本来整理我的下载文件夹

$ crontab -l | grep ansible
* 15 */3 * * ansible-playbook /home/seth/Ansible/cleanup.yaml

对您的计算环境的健康状况进行少量投资会大有裨益。有重复数据删除脚本、文件大小和 /tmp 目录监视器、照片大小调整器、文件移动器以及您可以安排在后台运行的更多琐碎任务,以帮助保持您的系统整洁。有了 cron,您的计算机可以以我希望我的实体公寓也能做到的方式照顾自己。

记住 cron 设置

除了想出为什么您需要 cron 之外,根据我的经验,关于 cron 最困难的事情是记住它的语法。一遍又一遍地对自己重复这句话,直到您将其记住

分钟、小时、日期、月份、星期几。

分钟、小时、日期、月份、星期几。

分钟、小时、日期、月份、星期几。

更好的是,去下载我们的免费速查表,这样您就可以在最需要它的时候将关键信息放在手边!

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

1 条评论

很好的技巧,我认为速查表会非常有用!cron 是你必须一次又一次学习的东西 =]

© . All rights reserved.