logo科技微讯

关于 Cron 的简单调查

作者:科技微讯
日期:2022-07-04
📝 笔记

Cron 有多个版本,最常用的版本是 1987 年由 Paul Vixie 定义的 Vixie Cron,五位,没有秒。

在 Unix 系统的 /etc 文件夹,有 Cron.hourly、Cron.daily、Cron.weekly、Cron.monthly 等预设文件夹,把某个 script 放在其中的一个文件夹,这个 script 就会按照这个文件夹的 Cron 执行任务。

Vixie Cron 没有秒,有些 Cron 版本支持秒。Cron 表达式有 5 位、6 位、7 位三种:

  • 5 位:没有秒、年;
  • 6 位:有秒,没有年;
  • 7 位:有秒、年;

没有提供秒,则认为是第 0 秒;没有提供年,则认为是每一年。

腾讯云函数的定时触发器支持 7 位、5 位表达式,但建议使用 7 位;阿里云函数的定时触发器是 6 位;华为云函数也是 6 位。

*    *    *    *    *    *    *
┬    ┬    ┬    ┬    ┬    ┬    ┬
│    │    │    │    │    |    └ year (optional)
│    │    │    │    │    └ day of week (0 - 7) (0 or 7 is Sun)
│    │    │    │    └───── month (1 - 12)
│    │    │    └────────── day of month (1 - 31)
│    │    └─────────────── hour (0 - 23)
│    └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, optional, if omitted, default to 0)

在标准的 cron 语法中,如果 day of month 和 day of week 都不是 *,那 day of month 和 day of week 是逻辑 OR 的关系,即如果一个日期满足了 day of month 或者 day of week 就被视作符合这个 cron 表达式。

day of month 如果写作 1/5 这种格式,那 / 前后的数字都不能大于 31,即 cron 无法表达每隔 32 天或 40 天这种重复性时间。

cron-parser 是一个可以根据传入的 cron 表达式获取下一个和上一个日期的库。

croner 可以通过 legacyMode 选项,让 day of month 和 day of week 变成逻辑 AND 的关系。

donation赞赏
thumbsup0
thumbsdown0
暂无评论