Linux 使用 cron 安排任务的技巧
使用这个简单但功能强大的 Linux 命令行工具来安排备份、文件清理和其他任务。下载我们新的 cron 备忘单。
对于计算机来说,让事情按照定期且可预测的时间表进行非常重要。这很重要,因为作为人类,我们有时会因为分心、有太多想法或正在度假而无法记住可靠地做事。计算机确实很擅长按计划做事,但人类必须在计算机采取行动之前对计算机进行编程。
在某种程度上,cron
系统是对编程的简单而基本的介绍。您只需编辑文件即可让计算机执行您希望它执行的操作。您甚至不必知道文件保存在哪里。您只需输入一个简单的命令,输入您希望计算机遵循的“配方”,然后保存您的工作。从那时起,您的计算机将在指定时间执行您的指令,直到被告知停止为止。
从设计上来说,cron
并不是一个复杂的系统。以下是您需要了解的内容。
什么是克朗?
cron
命令在 Linux 和 Unix 中非常普遍,并且经常被模仿和重新发明,以至于它几乎成为按计划发生的事情的通用术语。它是一种自动化形式,尽管它有不同的实现(Dillon 的 cron、Vixie 的 cron、chrony 等)以及诸如 anacron 和 systemd 计时器之类的变体,但语法和工作流程本质上仍然是几十年来都一样。
Cron 在“假脱机”系统上工作,很像打印机和电子邮件。如果您不知道打印机和电子邮件使用假脱机,那也没关系,因为假脱机文件的要点是您不应该过多考虑它。在 Linux 系统上,目录 /var/spool
被设计为重要但低级文件的中心枢纽,用户不打算直接与这些文件交互。 /var/spool
中管理的线轴之一是 cron
表或简称“crontab”。 Linux 系统上的每个用户(包括您自己)都有一个 crontab。用户可以编辑、查看和删除自己的 crontab。此外,用户可以使用 crontab 来安排任务。 cron
系统本身监视 crontab,并确保 crontab 中列出的任何作业都在其指定时间执行。
编辑 cron 设置
您可以使用 crontab
命令和 -e
(用于编辑)选项来编辑 crontab。默认情况下,大多数系统都会调用 vim 文本编辑器。如果您像我一样不使用 Vim,那么您可以在 ~/.bashrc
文件中为自己设置不同的编辑器。我将我的设置为 Emacs,但您也可以尝试 Nano、Kate 或任何您最喜欢的编辑器。 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(1 月)到 12(12 月)来设置月份,并且可以使用 0(星期日)到 6(星期六)来设置日期。该作业在 4 月份的 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 or @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
最难的事情就是记住它的语法。一遍又一遍地对自己重复这句话,直到你把它牢记在心:
分钟、小时、日期、月份、工作日。
分钟、小时、日期、月份、工作日。
分钟、小时、日期、月份、工作日。
更好的是,下载我们的免费备忘单,这样当您最需要的时候,钥匙就在手边!