Cron表达式的用法
什么是Cron表达式?
Cron 是一种用于设置定期执行任务的表达式。
最早出现于 Unix 操作系统,crontab 软件就是一款使用这套语法的任务管理工具,常用于备份系统或清理日志。
现在,Cron 表达式已被广泛地应用于各种操作系统和应用程序中。平时看到的像是
0 0 * * *
、*/5 * * * *
等这些字符串都属于 Cron 表达式。Node.js 中也支持使用 cron 包来指定定时任务。
Cron语法
Cron 表达式
经典的 Cron 表达式由 5 位构成,中间用空格分割。
语法如下:
[minute] [hour] [day of month] [month] [day of week]
Cron 表达式含义
每个字段的含义是:
[minte] 表示分钟。取值范围 0 到 59
[hour] 表示小时。取值范围 0 到 23
[day of month] 表示几号。取值范围 1 到 31
[month] 表示几月。取值范围 1 到 12,也可以使用名称简写(从 Jan 到 Dec)
[day of week] 表示周几。取值范围 0 到 7,也可以使用名称简写(从 Sun 到 Sat)
通用模式
每个位置上除了上面列举的值,还有一些通用模式可以使用:
逗号
,
:表示当前使用的值的列表。比如[minte]
取值1,3,5
时,表示1分、3分和5分时各执行一次连字符号
-
:表示当前使用的值的范围。比如[minte]
取值1-5
时,等同于1,2,3,4,5
,表示1分、2分、3分、4分和5分时各执行一次星号
*
:表示“从头到尾(frist-last)”。比如[minte]
取值*
时,等同于0-59
,表示每分钟执行一次斜杠符号
/
:表示步进。比如[minte]
取值*/2
,表示每 2 分钟执行一次,即在2分、4分……58分、0分(下一个小时)分别执行一次;当[minte]
取值1-9/2
时,等同于1,3,5,7,9
,表示1分、5分、5分、7分和9分时各执行一次。步进默认为1
,即*
的写法等同于*/1
,表示每分钟执行一次。
练习
* * * * *
表示每分钟执行一次。等同于 */1 * * * *
、0-59/1 * * * *
。
*/30 * * * *
表示每半个小时执行一次。
如果当前是 2023-08-03 15:41。那么后续执行时间分别是:
next at 2023-08-03 16:00:00
then at 2023-08-03 16:30:00
then at 2023-08-03 17:00:00
then at 2023-08-03 17:30:00
then at 2023-08-03 18:00:00
……
0 * * * *
表示每小时(整点)执行一次。等同于 0 */1 * * *
。
如果当前是 2023-08-03 15:41。那么后续执行时间分别是:
next at 2023-08-03 16:00:00
then at 2023-08-03 17:00:00
then at 2023-08-03 18:00:00
then at 2023-08-03 19:00:00
then at 2023-08-03 20:00:00
……
0 9-17 * * *
从早上9点到下午5点,每小时(整点)执行一次。
如果当前是 2023-08-03 15:41。那么后续执行时间分别是:
next at 2023-08-03 16:00:00
then at 2023-08-03 17:00:00
then at 2023-08-04 09:00:00
then at 2023-08-04 10:00:00
then at 2023-08-04 11:00:00
……
0 0 * * *
表示每天(整点)执行一次。等同于 0 0 */1 * *
。
如果当前是 2023-08-03 15:41。那么后续执行时间分别是:
next at 2023-08-04 00:00:00
then at 2023-08-05 00:00:00
then at 2023-08-06 00:00:00
then at 2023-08-07 00:00:00
then at 2023-08-08 00:00:00
……
0 8 * * *
表示每天上午 8 点执行一次。
如果当前是 2023-08-03 15:41。那么后续执行时间分别是:
next at 2023-08-04 08:00:00
then at 2023-08-05 08:00:00
then at 2023-08-06 08:00:00
then at 2023-08-07 08:00:00
then at 2023-08-08 08:00:00
……
0 8 * * 5
表示每周五上午 8 点执行一次。等同于 0 0 * * FRI
,相当于是 1 周执行 1 次。
如果当前是 2023-08-03 15:41。那么后续执行时间分别是:
next at 2023-08-04 00:00:00
then at 2023-08-11 00:00:00
then at 2023-08-18 00:00:00
then at 2023-08-25 00:00:00
then at 2023-09-01 00:00:00
……
0 8 * * 4,5
则表示每周四、每周五早上 8 点执行一次。
0 0 * * 1-5
表示每个工作日 8 点执行一次。
0 8 * * 6,0
则表示周末两天早 8 点执行一次。
0 0 1 * *
表示每月 1 号执行一次。等同于 0 0 1 */1 *
。
如果当前是 2023-08-03 15:41。那么后续执行时间分别是:
next at 2023-09-01 00:00:00
then at 2023-10-01 00:00:00
then at 2023-11-01 00:00:00
then at 2023-12-01 00:00:00
then at 2024-01-01 00:00:00
……
0 0 1 */3 *
表示每个季度执行一次。
如果当前是 2023-08-03 15:41。那么后续执行时间分别是:
next at 2023-10-01 00:00:00
then at 2024-01-01 00:00:00
then at 2024-04-01 00:00:00
then at 2024-07-01 00:00:00
then at 2024-10-01 00:00:00
……
0 0 1 1 *
表示每年执行一次(1月1号 00:00)。
如果当前是 2023-08-03 15:41。那么后续执行时间分别是:
next at 2024-01-01 00:00:00
then at 2025-01-01 00:00:00
then at 2026-01-01 00:00:00
then at 2027-01-01 00:00:00
then at 2028-01-01 00:00:00
……
Cron在线表达式生成器
👇👇👇
- 感谢你赐予我前进的力量