Hangfire 分布式后端作业调度框架服务

  • CronExpression(cron表达式)- CronTriggers(cron触发器)
    • 格式
    • 字段含义
    • 部分示例
    • cron表达式在线生成
    • Hangfire对于cron表达式支持的那些坑

CronExpression(cron表达式)- CronTriggers(cron触发器)

CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,复发的发射工作的时间表。
CronTrigger,你可以指定触发的时间表如“每星期五中午”,或“每个工作日9:30时”,甚至“每5分钟一班9:00和10:00逢星期一上午,星期三星期五“。
即便如此,SimpleTrigger一样,CronTrigger拥有的startTime指定的时间表时生效,指定的时间表时,应停止(可选)结束时间。

cron ['krɒn] :克龙(时间单位,等于百万年)
trigger [ˈtrɪɡɚ]

格式

cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式:
Seconds Minutes Hours DayofMonth Month DayofWeek Year

Seconds Minutes Hours DayofMonth Month DayofWeek

字段含义

字段 可用值
Seconds (秒) 可以用数字 0-59 ,’ - ’ , ’ * ’ , ’ / ’ 表示
Minutes(分) 可以用数字 0-59 ,’ - ’ , ’ * ’ , ’ / ’ 表示
Hours(时) 可以用数字 0 - 23,’ - ’ , ’ * ’ , ’ / ’ 表示
Day-of-Month(天) 可以用数字 1 - 31 ,’ - ’ , ’ * ’ , ’ ? ’ , ’ / ’ , ’ L ’ , ’ W ’ , ’ C ’ 表示,但要注意一些特别的月份
Month(月) 可以用 0 - 11 ,或用字符串 “JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV , DEC” ,或 ’ - ’ , ’ * ’ , ’ / ’ 表示
Day-of-Week(周) 可以用数字 1 - 7 表示(1 = 星期日),或用字符口串“SUN, MON, TUE, WED, THU, FRI , SAT”,或 ’ - ’ , ’ * ’ , ’ ? ’ , ’ / ’ , ’ L ’ , ’ C ’ , ’ # ’ 表示
Year(年) 可以留,或 1970 - 2099 ,’ - ’ , ’ * ’ , ’ / ’ 表示
特殊字符 含义 限制 示例
* 表示所有值 如在Minutes域使用*, 即表示每分钟都会触发事件
表示未说明的值,即不关心它为何值 只能用在DayofMonth和DayofWeek域 它也匹配域的任意值,但实际不会。因为DayofMonth和DayofWeek会相互影响。例如想在每月的20日触发调度,不管20日到底是星期几,则只能使用如下写法: 13 13 15 20 * ?, 其中最后一位只能用?,而不能使用*,如果使用*表示不管星期几都会触发
- 表示一个指定的范围 如在Minutes域使用5-20,表示从5分到20分钟每分钟触发一次
表示列出枚举值 在Minutes域使用5,20,则意味着在5和20分每分钟触发一次
/ 符号前表示开始时间,符号后表示每次递增的值 如“0/15”表示每隔15分钟执行一次,“0”表示为从“0”分开始, “3/20”表示表示每隔20分钟执行一次,“3”表示从第3分钟开始执行
# 表示这个月的第几个周几 ,符号前为周几,符号后为第几个 只能用在day-of-week域 如"6#3"指这个月第3个周五(6指周五,3指第3个)。如果指定的日期不存在,触发器就不会触发
L 表示最后 只能出现在DayofWeek和DayofMonth域 用在day-of-month字段意思是 “这个月最后一天”;用在 day-of-week字段, 它简单意思是 “7” or “SAT”。 如果在day-of-week字段里和数字联合使用,它的意思就是 “这个月的最后一个星期几” – 例如: “6L” 意味"这个月的最后一个星期五"
W 表示最接近指定天的工作日(周一到周五),系统将在离指定日期的最近的有效工作日触发事件 只能出现在DayofMonth域 在day-of-month字段用“15W”指“最接近这个 月第15天的工作日”,即如果这个月第15天是周六,那么触发器将会在这个月第14天即周五触发;如果这个月第15天是周日,那么触发器将会在这个月第 16天即周一触发;如果这个月第15天是周二,那么就在触发器这天触发。注意一点:这个用法只会在当前月计算值,不会越过当前月。“W”字符仅能在 day-of-month指明一天,不能是一个范围或列表。也可以用“LW”来指定这个月的最后一个工作日
LW 表示在某个月最后一个工作日 只能出现在DayofMonth域 即最后一个星期五
C 指和calendar联系后计算过的值 如在day-of-month 字段用“5C”指在这个月第5天或之后包括calendar的第一天;在day-of-week字段用“1C”指在这周日或之后包括calendar的第一天

部分示例

*/5 * * * * ? 每隔5秒执行一次
0 */1 * * * ? 每隔1分钟执行一次
0 0 5-15 * * ? 每天5-15点整点触发
0 0/3 * * * ? 每三分钟触发一次
0 0-5 14 * * ? 在每天下午2点到下午2:05期间的每1分钟触发
0 0/5 14 * * ? 在每天下午2点到下午2:55期间的每5分钟触发
0 0/5 14,18 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
0 0 10,14,16 * * ? 每天上午10点,下午2点,4点

0 0 12 ? * WED 表示每个星期三中午12点
0 0 17 ? * TUES,THUR,SAT 每周二、四、六下午五点
0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44触发
0 15 10 ? * MON-FRI 周一至周五的上午10:15触发
0 0 23 L * ? 每月最后一天23点执行一次
0 15 10 L * ? 每月最后一日的上午10:15触发
0 15 10 ? * 6L 每月的最后一个星期五上午10:15触发
0 15 10 * * ? 2005 2005年的每天上午10:15触发
0 15 10 ? * 6L 2002-2005 2002年至2005年的每月的最后一个星期五上午10:15触发
0 15 10 ? * 6#3 每月的第三个星期五上午10:15触发

“30 * * * * ?” 每半分钟触发任务
“30 10 * * * ?” 每小时的10分30秒触发任务
“30 10 1 * * ?” 每天1点10分30秒触发任务
“30 10 1 20 * ?” 每月20号1点10分30秒触发任务
“30 10 1 20 10 ? *” 每年10月20号1点10分30秒触发任务
“30 10 1 20 10 ? 2011” 2011年10月20号1点10分30秒触发任务
“30 10 1 ? 10 * 2011” 2011年10月每天1点10分30秒触发任务
“30 10 1 ? 10 SUN 2011” 2011年10月每周日1点10分30秒触发任务
“15,30,45 * * * * ?” 每15秒,30秒,45秒时触发任务
“15-45 * * * * ?” 15到45秒内,每秒都触发任务
“15/5 * * * * ?” 每分钟的每15秒开始触发,每隔5秒触发一次
“15-30/5 * * * * ?” 每分钟的15秒到30秒之间开始触发,每隔5秒触发一次
“0 0/3 * * * ?” 每小时的第0分0秒开始,每三分钟触发一次
“0 15 10 ? * MON-FRI” 星期一到星期五的10点15分0秒触发任务
“0 15 10 L * ?” 每个月最后一天的10点15分0秒触发任务
“0 15 10 LW * ?” 每个月最后一个工作日的10点15分0秒触发任务
“0 15 10 ? * 5L” 每个月最后一个星期四的10点15分0秒触发任务
“0 15 10 ? * 5#3” 每个月第三周的星期四的10点15分0秒触发任务

cron表达式在线生成

在线Cron表达式生成器
quartz/Cron/Crontab表达式在线生成工具

Hangfire对于cron表达式支持的那些坑

  • 截止目前为止我使用的是1.6.22,就是最新免费版本验证发现下面这些。
  • hangfire因为最多到分钟级别,所以,其支持的cron表达式仅仅只有5个域,没有秒和年,即 Minutes Hours DayofMonth Month DayofWeek 。所以如果自己直接写cron字符串的话,超过五个域它会报错。
  • 对于cron表达式中的一些拓展字符并不支持,目前发现有 对于 L并不能够识别,对于月和周的JAN - DEC,SUN - SAT也不识别,只能是1-31,1-7。所以自己写字符串请不要带上这些字符。如配置每月最后一天就无法直接配置,必须自己手动写一些逻辑才行。What happens on day 31的官方论坛讨论

感谢以下参考资料,本人做的主要是验证、学习、整合:
cron表达式详解,cron表达式写法,cron表达式例子
Cron表达式说明
cron表达式详解

C#-进击Hangfire相关推荐

  1. 进击时代!王雪红的谦卑与坚守

    节前,HTC董事长王雪红发表了一封内部信,王雪红在心中表示,2015年,HTC不仅要在质量.创新能力与工作效率方面更进步,并表示,"我们未来企业成长的动能不仅包含智能手机,还会加入新的领域如 ...

  2. 多细胞生命进击之路:单细胞为何放弃自由,长成复杂的多细胞?

    来源:集智俱乐部 作者:Veronique Greenwood 译者:赵雨亭 审校:张澳 编辑:邓一雪 导语 人类作为复杂的多细胞生命,似乎理所当然地认为,多细胞生命相对单细胞生命有绝对的优势.但实际 ...

  3. 进击webpack4 (优化篇)

    进击webpack 4 (基础篇一) 进击webpack4 (基础篇二:配置 一) 进击webpack4 (基础篇三:配置 二) 不解析不依赖第三方模块的模块 noParse 有一些第三方模块,它本身 ...

  4. 百度站长工具进击site结果页面[SITE特型]

    最近在度娘上site站点是不是发现多了一个应用展示框?没错!这就是度娘新推出的site特型,仔细看一下是百度站长平台的相关功能,作为目前国内市场占有率比较高的搜索引擎,百度站长工具进击site结果页面 ...

  5. Core 定时任务之HangFire

    ASP.NET Core 使用 Hangfire 很简单,首先,Nuget 安装程序包 > install-package Hangfire -pre 然后ConfigureServices添加 ...

  6. 和信贷财报:互金行业收缩压力之下的个体进击之道

    文|李永华 来源|螳螂财经(原潇湘财经) ​北京时间12月3日晚,在纳斯达克已上市1年有余的互金平台和信贷发布了截至2018年9月30日的2019财年Q2财报,其中净收入362万美元,符合管理层此前预 ...

  7. 基于 abp vNext 和 .NET Core 开发博客项目 - 集成Hangfire实现定时任务处理

    基于 abp vNext 和 .NET Core 开发博客项目 - 集成Hangfire实现定时任务处理 转载于:https://github.com/Meowv/Blog 接下来,将完成一个任务调度 ...

  8. Hangfire源码解析-如何实现可扩展IOC的?

    一.官方描述 These projects simplify the integration between Hangfire and your favorite IoC Container. The ...

  9. Hangfire 任务调度

    Hangfire是一个开源且商业免费使用的工具函数库.可以让你非常容易地在ASP.NET应用(也可以不在ASP.NET应用)中执行多种类型的后台任务,而无需自行定制开发和管理基于Windows Ser ...

最新文章

  1. 几种Normalization算法.md
  2. c++,static 静态成员变量 / 静态成员函数
  3. 更新Svn客户端后,右键菜单中没有TortoiseSVN了
  4. c# emnu 获取注释_C# 数据操作系列 - 19 FreeSql 入坑介绍
  5. 万能的BERT连文本纠错也不放过
  6. Exploit开发系列教程-Mona 2 SEH
  7. LintCode 生成括号
  8. 最课程学员启示录:一份有诚意的检讨书
  9. JVM教程:JM内存分哪几个区,每个区的作用是什么?
  10. WebService接口开发和调用
  11. python控制蓝牙pybluez_Python之蓝牙通讯模块pybluez学习笔记
  12. lae界面开发工具入门之介绍十四--《介绍lae在windows平台上如何打包编译》
  13. Mac 重启服务→services
  14. java.util.regex.PatternSyntaxException: Unclosed counted closure near index 14
  15. MTK获取iso的几种方式
  16. 计算机学生要学的基础知识,中小学生应注重学习计算机的基础知识
  17. Ubuntu 18.04安装Docker Dashboard
  18. u盘怎么样在w ndows7上使用,用U盘给MAC BOOK AIR安装windows7系统
  19. 【计算机毕业设计】133在线课程管理系统
  20. php callable closure,详解php 使用Callable Closure强制指定回调类型

热门文章

  1. Design contains shelved or modified (but not repoured) polygons. The result of DRC is not correct.
  2. WEB打印控件Lodop的使用
  3. java mediator模式_设计模式之Mediator 中介者模式 - 解道Jdon
  4. 使用记录6_发布微信小游戏
  5. 论文笔记:FLEX: Unifying Evaluation for Few-Shot NLP
  6. 异步4月新书,送出一本你爱的!
  7. ​Spring Cloud:统一异常处理
  8. Codeforces 446C. DZY Loves Fibonacci Numbers (Fibonacci + 线段树)
  9. opencv在图片上添加文字
  10. Oracle Database 9i/10g/11g编程艺术:深入数据库体系结构