一、Cron表达式简介
Cron表达式是一个用于设置计划任务的字符串,该字符串以5或6个空格分隔,分为6或7个域,每一个域代表任务在相应时间、日期或时间间隔执行的规则【Cron表达式最初是在类Unix操作中系统中使用的,但现在已经广泛应用于各种操作系统和编程语言中】。
Cron表达式常用于定时调度任务中(可通过Cron表达式来指定任务在某个时间点或进行周期性执行任务);Cron表达式的框架有:Quartz
Quartz.NET开源库实现作业定时调度——常用示例_quartz.net 完整示例https://blog.csdn.net/xiaochenXIHUA/article/details/118462070?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169565142516800188570812%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=169565142516800188570812&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-2-118462070-null-null.nonecase&utm_term=quartz&spm=1018.2226.3001.4450
二、Cron表达式解析
Cron表达式,分为7部分,每个域代表一个含义(前6个字段是必须的,最后一个是可选的),如下所示:
域 | 秒 (second) | 分 (minute) | 时 (hour) | 日 (day) | 月 (month) | 星期几 (week) | 年份 (year) |
取值范围 | 0~59 | 0~59 | 0~23 | 1~31 | 1~12或 JAN-DEC | 1-7(1表示星期天) | 可选,1970~2099或者空 |
可出现的字符 | , - * / | , - * / | , - * / | , - * / ? L W C | , - * / | , - * / ? L C # | , - * / |
三、Cron表达式字符解析
序号 | 字符 | 字符说明 |
1 | , | 指定某几个值;比如【3,5,8】在秒字段里面表示每分钟的第3,第5,第8秒都会执行,以此类推。 |
2 | - | 指定的范围;比如【1-8】在秒字段里面表示每分钟的第1,第2,第3,第4,第5,第6,第7,第8秒都会执行,以此类推。 |
3 | * | 所有;在不同字段上都表示要所有,比如:每秒,每分,每小时等 |
4 | / | 指定值的起始和增加幅度;比如【5/6】在秒字段表示每分钟的第5秒开始,每隔6秒执行一次(即第5秒,第11秒,第17秒,第23秒,第29,第35,第41,第47,第53,第59秒开始执行) |
5 | ? | 仅用于【日】和【周】字段;因为在指定某日和周几的时候,这两个值实际上是冲突的,所以需要用【?】标识不生效的字段;比如【6 6 * * * ?】表示每年每月每日每小时的6分6秒触发任务,而这里的周就没有效果了 |
序号 | 字符 | 字符说明 |
1 | L | 最后;L只能出现在日和星期域;在日域中,L表示一个月的最后一天;在星期域中,L表示一个星期的最后一天 |
2 | W | 表示有效工作日(周一到周五);只能出现在日域,系统将在离指定日期的最近的有效工作日触发事件;比如:在 日使用5W,如果5日是星期六,则将在最近的工作日:星期五,即4日触发。如果5日是星期天,则在6日(周一)触发;如果5日在星期一 到星期五中的一天,则就在5日触发。另外,W的最近寻找不会跨过月份。 |
3 | C | 日历(表示canlendar);例如“1C”在星期域上就是包括日历上的星期日,基本无用 |
4 | LW | 这两个字符可以连用,表示在某个月最后一个工作日;比如最后一个星期五 |
5 | # | 用于确定每个月第几个星期几;比如在3#3,表示某月的第3个星期二 |
四、常见表达式
表达式 | 描述 |
---|---|
*/1 * * * * ? | 每隔1秒执行一次 |
*/5 * * * * ? | 每隔5秒执行一次 |
0 */1 * * * ? | 每隔1分钟执行一次 |
0 0 23 * * ? | 每天23点执行一次 |
0 0 1 1 * ? | 每月1号凌晨1点执行一次 |
0 0 23 L * ? | 每月最后一天23点执行一次 |
0 0 1 ? * L | 每周星期六凌晨1点执行一次 |
0 26,29,32 * * * ? | 在每小时的26分、29分、32分执行一次 |
0 * 14 * * ? | 每天下午14点钟开始到14点59分结束这么一个时间段 |
0 0/5 14 * * ? | 每天下午14点到14点55分之间每5分钟触发一次 |
0 0/5 14,18 * * ? | 每天下午14点到14点55分 和18点到18点55分之间 每5分钟触发一次 |
0 0-5 14 * * ? | 每天下午14点开始到14点05结束 |
0 10,44 14 ? 3 WED | 每年三月的星期三的下午2:10和2:44触发 |
0 15 10 ? * MON-FRI | 周一至周五的上午10:15触发 |
0 10,14,16 * * ? | 每天上午10点,下午2点,4点 |
0/30 9-17 * * ? | 朝九晚五工作时间内每半小时 |
0 0 12 1/5 * ? | 每个月从第一天开始每隔5天中午12点触发一次 |
0 11 11 11 11 ? | 每年11月11号11点11分 |
0 0 0,13,18,21 * * ? | 每天的0点、13点、18点、21点都执行一次 |
0 0 10,14,16 * * ? | 每天上午10点,下午2点,4点 |
0 * 14 * * ? | 在每天下午2点到下午2:59期间的每1分钟触发 |
0 12 ? * WED | 表示每个星期三中午12点 |
0 0 12 * * ? | 每天中午12点触发 |
0 * 14 * * ? | 在每天下午2点到下午2:59期间的每1分钟触发 |
0 0/5 14 * * ? | 在每天下午2点到下午2:55期间的每5分钟触发 |
0 0/5 14,18 * * ? | 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 |
0 0-5 14 * * ? | 在每天下午2点到下午2:05期间的每1分钟触发 |
0 15 10 15 * ? | 每月15日上午10:15触发 |
0 15 10 L * ? | 每月最后一日的上午10:15触发 |
0 15 10 ? * 6L | 每月的最后一个星期五上午10:15触发 |
0 15 10 ? * 6L 2012-2018 | 2012年至2018年的每月的最后一个星期五上午10:15触发 |
0 15 10 ? * 6#3 | 每月的第三个星期五上午10:15触发 |
0 15 10 ? * * | 每天上午10:15触发 |
0 15 10 * * ? 2018 | 2018年的每天上午10:15触发 |
0 0/5 14 * * ? | 在每天下午2点到下午2:55期间的每5分钟触发 |
0 0 2 1 * ? * | 表示在每月的1日的凌晨2点调度任务 |
0 15 10 ? * MON-FRI | 表示周一到周五每天上午10:15执行作业 |
0 15 10 ? 6L 2002-2006 | 表示2002-2006年的每个月的最后一个星期五上午10:15执行作 |
0 0 23 * * ? | 每天 |
0 59 23 ? * SUN | 每周 |
0 59 23 L * ? | 每月 |
0 59 23 L 3,6,9,12 ? | 每季度 |
0 0 0 31 12 ? | 每年 |
五、Cron表达式验证网站
在线Cron表达式生成器通过这个生成器,您可以在线生成任务调度比如Quartz的Cron表达式,对Quartz Cron 表达式的可视化双向解析和生成.https://cron.qqe2.com/
quartz/Cron/Crontab表达式在线校验工具-BeJSON.com可以看cron表达式执行时间,可以验证你的cron表达式是否正确https://www.bejson.com/othertools/cronvalidate/
六、.NET的定时调度任务组件有哪些
C#/.NET/.NET Core定时任务调度组件有哪些? - 知乎原文由Rector首发于 码友网 之 C#/.NET/.NET Core应用程序编程中实现定时任务调度的方法或者组件有哪些,Timer,FluentScheduler,TaskScheduler,Gofer.NET,Coravel,Quartz.NET还是Hangfire?摘要C#/.NET/.NET Core的…https://zhuanlan.zhihu.com/p/89976729