让事情按规律和可预测的时间表发生在计算机上是很重要的。这很重要,因为作为人类,我们有时不善于记住可靠地做事,因为我们会分心,有太多的心事,或者我们在度假。计算机在按计划做事方面确实很出色,但在计算机采取行动之前,人类必须对计算机进行编程。
在某种程度上,cron 系统是一个简单和初级的编程介绍。你可以通过编辑一个文件让你的计算机做你想做的事。你甚至不需要知道文件保存在哪里。你只需键入一个简单的命令,输入你想让电脑遵循的 "配方",并保存你的工作。从那时起,你的计算机在指定的时间执行你的指令,直到被告知停止。
根据设计,cron ,这不是一个复杂的系统。下面是你需要了解的内容。
什么是Cron?
cron 命令在Linux和Unix中无处不在,而且它被模仿和重塑的次数如此之多,以至于它几乎成为按计划发生的事情的一个通用术语。它是自动化的一种形式,尽管有不同的实现方式(Dillon的cron、Vixie的cron、chrony和其他),以及像 anacron和systemd 定时器,但其语法和工作流程几十年来基本保持不变。
Cron在一个 "spool "系统上工作,很像打印机和电子邮件。如果你不知道打印机和电子邮件使用spool,那也没关系,因为spool文件的意义在于你不应该多想它。在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 ,最困难的事情是记住它的语法。对自己重复这句话,一遍又一遍,直到你把它记在心里。
分钟,小时,日期,月份,工作日。
分钟,小时,日期,月份,工作日。
分钟,小时,日期,月份,工作日。
更好的是,去下载我们的免费作弊表,这样你就可以在最需要的时候把钥匙放在手边了