cron 表达式: 一套用于指定定时任务的表达式
Cron 是一种用于设置定期执行任务的表达式。最早出现于 Unix 操作系统,crontab 软件中就是一款使用这套语法的任务管理工具,常用于备份系统或清理日志。
现在,Cron 表达式已被广泛地应用于各种操作系统和应用程序中。平时看到的像是 0 0 * * *
、*/5 * * * *
等这些字符串都属于 Cron 表达式。 中也支持使用 cron
包来指定定时任务。
既然使用那么广泛,那么它是如何定义的呢?接下来我们就来学习。
(相关资料图)
语法
经典的 Cron 表达式由 5 位构成,中间用空格分割。语法如下:
[minute] [hour] [day of month] [month] [day of week]
每个字段的含义是:
[minte]
表示分钟。取值范围 0 到 59
[hour]
表示小时。取值范围 0 到 23
[day of month]
表示几号。取值范围 1 到 23
[month]
表示几月。取值范围 1 到 12,也可以是用名称简写(从 Jan
到 Dec
)
[day of week]
表示周几。取值范围 0 到 6,也可以是用名称简写(从 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 包执行定时任务。需要注意的是,cron 采用的是 6 位 Cron 表达式语法。
跟经典语法相比:1. 第一位表示“秒”,而不是经典定义中的“分钟”2. 另外,cron 包目前的 v2 版本的[month]的取值范围是 0~11,而非 1~12。不过官方文档说,cron v3 版本开始[month]的取值范围将调整为 1~12。
下面就来安装依赖。
使用方式如下:
总结
Cron 是一种用于设置定期执行任务的表达式,语法比较简单,常用于备份系统或清理日志,现在已被广泛地应用于各种操作系统和应用程序中。经典的 Cron 表达式由 5 位构成,中间用空格分割,分表表示“分钟”、“小时”、“几号”、“几月” 和 “周几”。实际使用时,不同软件可能会做一些拓展,比如 的 Cron 使用的就是 6 位,稍稍注意一下即可。
参考链接
●/package/cron●/●/
- cron 表达式: 一套用于指定定时任务的表达式
- 官方指导价8.99-13.69万元 东风风神皓瀚正式上市
- 4小时23条预警!暴雨、雷暴大风,今晚到
- 水星mw300r(关于水星mw300r的基本详情介绍)
- 情谊机战攻略(情谊机战)
- 注意!2023年7月22日cma考试成绩预计九月份公布!
- 浮沙建塔!郭台铭搞极限运动,究竟会成为觉悟人还是扶龙王?
- keysight是德E4413A 宽动态范围功率传感器
- 拖鞋要买刚好还是大一点(外穿凉拖选大一码还是小一码)
- 等了整整四年!终于能在勇士球迷面前打球了…
- 到2025年重庆新增自用充电桩29.8万个
- 尼龙的密度是多少kg m3(尼龙的密度是多少)
- 富时中国A50指数期货高开,现涨0.06%
- 蔡甸论坛简介范文(蔡甸论坛简介)
- 7月MPV车型销量排行榜!别克GL8再次夺冠,腾势D9月销破万
- 西宁:多层住宅楼累计加装电梯443部
- 北交所、全国股转公司实施便企助民7项举措 支持受汛情影响地区和企业恢复发展
- 7月新增信贷3459亿元 降准预期升温
- 高德红外08月11日被深股通减持216.08万股
- 航天长峰:连续3日融资净偿还累计572.44万元(08-11)
- 股票行情快报:闰土股份(002440)8月11日主力资金净卖出53.12万元
- 美股异动 | 巨量交易继续拉高WeWork(WE.US)股价 上涨超22%
- 知乎直播间在哪里(知乎上线直播功能)
- 欲刷支付宝流水提升贷款额度?怎料卡内资金却被盗刷
- 恒大汽车:将于9月5日召开股东周年大会
- 名单公布!我州再添“国字号”名片~
- 两只科创成长ETF获证监会批准 科创指数家族持续壮大
- 常州太湖湾音乐节免费大巴在哪里?
- 浙江省第十三届戏剧节获奖名单 浙江戏曲电影展映中心在杭成立
- 一高校实验室发生火灾