在计算机上按规律和可预测的计划进行操作非常重要。这很重要,因为作为人类,我们有时可能不擅长可靠地记住要做的事情,因为我们可能会分心,脑子里想得太多,或者我们正在度假。计算机非常擅长按计划做事,但人类必须先对计算机进行编程,然后计算机才能采取行动。
在某种程度上,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 表示一月到 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
最困难的事情是记住它的语法。一遍又一遍地对自己重复这句话,直到您将其记住
分钟、小时、日期、月份、星期几。
分钟、小时、日期、月份、星期几。
分钟、小时、日期、月份、星期几。
更好的是,去下载我们的免费速查表,这样您就可以在最需要它的时候将关键信息放在手边!
1 条评论