理解 cron 语法

LinuxBeginner
立即练习

简介

在 Linux 中,自动执行重复性任务对于系统维护非常重要。无论是每天运行备份、清理临时文件,还是每周生成报告,这些任务都由名为 Cron 的系统工具处理。

Cron 是一种严格基于时间的作业调度器。它依靠特定的配置语法,准确确定命令的运行时间。这个配置表通常称为「crontab」。

Cron 数十年来一直是 Unix 文化的一部分。在现代工作流平台和云调度器出现之前很久,管理员就依靠 cron 在预定时间运行备份、清理任务、报告和维护任务。

刚开始看到类似 0 2 * * * 的 crontab 条目时,可能会感到困惑。在本实验中,你将学习如何理解和编写这种语法。你将完成以下任务:

  1. 查看系统 crontab:查看全局 cron 配置文件。
  2. 解析语法:理解其中 5 个时间和日期字段。
  3. 编写计划:为每天运行的任务构造有效的 cron 表达式。

查看系统 Cron 表

理解 cron 语法的一种快捷方法是查看系统级配置文件 /etc/crontab。该文件通常包含一个有助于理解字段布局的文件头说明。

这个文件既是真实的配置文件,也可以作为学习参考。许多 Linux 系统会在其中加入注释,因为 cron 语法简洁而强大;在理解字段顺序之前,也很容易误读它。

运行以下命令查看该文件:

cat /etc/crontab

在输出中找到 Example of job definition 部分(不同发行版中的行可能略有差异):

## .---------------- minute (0 - 59)
## |  .------------- hour (0 - 23)
## |  |  .---------- day of month (1 - 31)
## |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
## |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
## |  |  |  |  |
## *  *  *  *  * user-name command to be executed

该图表说明,每个 cron 计划都由 5 个字段和要运行的命令组成:

  1. 分钟(0-59)
  2. 小时(0-23,24 小时制)
  3. 月份中的日期(1-31)
  4. 月份(1-12)
  5. 星期几(0-7,其中 0 和 7 都表示星期日)

星号 * 是通配符,表示「每一个」或「每次」。例如,在「月份」字段中使用 *,表示「每个月」。

Cron 表达式很简洁,因为每个字段都会缩小计划的匹配范围。所有字段组合起来,就能表示一个重复发生的时间点。尽早养成从左到右按「分钟、小时、日期、月份、星期几」读取字段的习惯,这一点非常重要。

例如:17 * * * * 表示「每小时的第 17 分钟、每天都运行」。

准备语法文件

现在你已经了解了字段结构,接下来练习编写一个条目。

我们将创建一个文本文件,用于编写 cron 表达式草稿。在将表达式添加到实际的系统调度器之前,先这样练习是一个好方法。

这一步很重要,因为 cron 条目虽然只是普通文本,但安装后会产生实际影响。单独编写表达式,可以让你在将其变成自动化任务之前先确认计划安排。

确保当前位于项目目录:

cd ~/project

创建一个名为 cron_syntax.txt 的空文件:

touch cron_syntax.txt

确认文件已创建:

ls -l cron_syntax.txt

编写每日计划语法

你的任务是构造一个 cron 表达式,使任务能够「每天凌晨 2:00 运行」。

我们来分解这一要求对应的 5 个字段:

  1. 分钟:我们需要正好在 2:00 运行,也就是第 0 分钟。值为:0。
  2. 小时:我们需要凌晨 2 点运行(24 小时制)。值为:2。
  3. 月份中的日期:我们希望它在每月的每天运行。值为:*。
  4. 月份:我们希望它在每年的每个月运行。值为:*。
  5. 星期几:无论当天是星期几,我们都希望它运行。值为:*。

将这些字段组合起来,表达式就是:0 2 * * *。

将此语法追加到文件中:

echo "0 2 * * *" >> cron_syntax.txt

检查写入的条目:

cat cron_syntax.txt

语法 0 2 * * * 告诉系统:「当分钟为 0 且小时为 2 时,运行命令。」

请记住这个理解方式:cron 会将当前时间与 5 个字段逐一匹配。当当前时间符合该模式时,cron 就会启动这个作业。

总结

在本实验中,你学习了 cron 调度的基础知识:

  1. 系统配置:查看 /etc/crontab,了解标准字段布局。
  2. 字段结构:识别 5 个字段:分钟、小时、月份中的日期、月份和星期几。
  3. 编写表达式:成功为每日任务创建语法(0 2 * * *)。

理解这种语法对于在 Linux 环境中自动执行各种常规任务至关重要。