没有输出的输入是不完整的

0%

cron表达式学习

Cron语法经常用于定时任务的设定,如定时进行数据采集任务,定时进行数据备份任务等。
本文对cron表达式进行了简单介绍。

语法说明

  1. 本文先介绍常见 Linux cron 的五个时间字段,分别对应分钟、小时、天、月、周。 每个部分用空格隔开。用户 crontab 在这些字段后还要写要执行的命令;系统 crontab 通常还包含用户名。
  2. 每个部分的通用标志。
  • * : 表示任意值
  • , :表示值的列表
  • - :表示值的范围
  • / :表示值的步长
  1. 每个值的取值范围
  • 分钟: 0 - 59
  • 小时:0 - 23
  • 天:1 - 31
  • 月:1 - 12
  • 周:0 - 7,0 和 7 都表示周日(这里以常见 Vixie/Cronie 实现为例)

举例说明

  1. 每隔十分钟执行一次
1
*/10 * * * *


2. 2、4、6、8、10、12 月中,每周一周二的前两个小时(00:00–01:55)每隔5分钟执行一次

1
*/5 0-1 * 2,4,6,8,10,12 1,2

这里用 0-1 表示前两个小时,用 2,4,6,8,10,12 明确列出双月。要注意范围包含两端,所以 0-2 实际包含三个小时;月份若写成 */2,则会从 1 月开始,选中单月。

后续更新

前面介绍的是 Linux cron 的写法。在盖若博主的文章中,我还看到了一些带秒和年份的表达式,它们来自其他调度器。以 Quartz 为例:

  1. Quartz 的 cron 表达式有六个必填字段,第一个是秒,并可加第七个年份字段。
  2. 星期范围、问号等规则也和 Linux cron 不同,详情见 Quartz 官方教程。

所以使用前要先确认应用或库采用哪一种规则,不能只按字段数量来判断,更不能把 Quartz 表达式直接放进 Linux crontab。

参考链接

  1. 在线解析crontab guru
  2. 盖若-Cron 定时任务表达式手册