Appearance
定时任务
概述
定时任务是一种预设任务,在特定的时间点执行预设的 自动化
程序或者脚本
。例如每天早上10点钟,查询超时的任务,并且发送催办邮件。
定时任务的精度为 1分钟,也就是说所有的定时任务在执行时都会有+(0 - 60秒)的延迟。
ℹ️ 提示
在同一时刻只会有一个定时任务执行。例如我们配置了发送邮件的定时任务,每间隔五分钟执行一次,假设第一次执行时0:00,执行的过程耗时6分钟, 那么计划中本该在0:05执行的自动化就会被取消执行。
ℹ️ 重要信息
定时任务执行的自动化程序必须是不包含交互式步骤的
触发类型
在织信低代码平台中,定时任务的类型主要有以下两种:
默认(周期触发):这种类型的定时任务按照预设的周期性时间间隔自动触发。例如,可以设置任务每小时、每天或每周触发一次。
cron表达式:这种类型的定时任务使用Cron表达式来定义复杂的时间调度规则。Cron表达式是一种字符串格式,用于表示时间表,允许用户精确地定义任务在特定时间点或时间间隔内触发。
示例
默认(周期触发):
- 每天凌晨1点触发任务。
- 每周一早上8点触发任务。
cron表达式:
0 0 1 * * ?
:每天凌晨1点触发任务。0 0 8 ? * MON
:每周一早上8点触发任务。
创建定时任务的步骤
- 选择定时任务类型:在创建定时任务时,首先选择任务的触发类型是“默认(周期触发)”还是“Cron表达式”。
- 配置触发时间:根据选择的类型,配置相应的时间参数。如果选择“默认(周期触发)”,则设置周期时间;如果选择“Cron表达式”,则输入Cron表达式。
- 设置任务内容:定义定时任务需要执行的具体操作,例如调用自动化步骤、调用脚本。
通过使用这两种类型的定时任务,用户可以灵活地安排和管理任务的执行时间,满足各种业务需求。
失火策略
在织信低代码平台中,定时任务的失火策略(Misfire Policy)是指当定时任务由于某种原因没有在预定的时间触发时,系统如何处理这种情况。常见的失火策略包括以下几种:
- 立即执行所有未触发 任务,然后触发器再按计划运行:当任务错过触发时间后,一旦系统恢复运行,立即执行错过的任务。
- 丢弃所有未触发任务,然后在触发器一下个调度周期按计划运行:当任务错过触发时间后,放弃此次执行,等待下一个触发时间。
示例
- 立即执行:任务原定于每天凌晨1点执行,但由于系统维护,任务在凌晨1点没有执行。当系统恢复运行时,立即执行错过的任务。
- 丢弃所有:任务原定于每天凌晨1点执行,但由于系统维护,任务在凌晨1点没有执行。当系统恢复运行时,放弃这次执行,等待下一个凌晨1点再执行任务。
通过合理配置失火策略,可以确保定时任务在各种情况下都能按照预期执行,满足业务需求。
cron表达式参考
cron 表达式是一个字符串,该字符串由 6 个空格分为 7 个域,每一个域代表一个时间含义。常用语定时任务。
cron有如下两种语法格式
Seconds Minutes Hours DayofMonth Month DayofWeek
Seconds Minutes Hours DayofMonth Month DayofWeek Year
通常定义 “年” 的部分可以省略,实际常用的由 前六部分组成
关于 cron 的各个域的定义如下表格所示:
域 | 是否必填 | 值以及范围 | 通配符 |
---|---|---|---|
秒 | 是 | 0-59 | , - * / |
分 | 是 | 0-59 | , - * / |
时 | 是 | 0-23 | , - * / |
日 | 是 | 1-31 | , - * ? / L W |
月 | 是 | 1-12 或 JAN-DEC | , - * / |
周 | 是 | 1-7 或 SUN-SAT | , - * ? / L # |
年 | 否 | 1970-2099 | , - * / |
通配符含义介绍
,
这里指的是在两个以上的时间点中都执行,如果我们在 “分” 这个域中定义为 8,12,35 ,则表示分别在第8分,第12分 第35分执行该定时任务;-
这个比较好理解就是指定在某个域的连续范围,如果我们在 “时” 这个域中定义 1-6,则表示在1到6点之间每小时都触发一次,用 , 表示 1,2,3,4,5,6;*
表示所有值,可解读为 “每”。 如果在“日”这个域中设置 *,表示每一天都会触发;?
表示不指定值。使用的场景为不需要关心当前设置这个字段的值。例如:要在每月的8号触发一个操作,但不关心是周几,我们可以这么设置 0 0 0 8 * ?;/
在某个域上周期性触发,该符号将其所在域中的表达式分为两个部分,其中第一部分是起始值,除了秒以外都会降低一个单位,比如 在 “秒” 上定义 5/10 表示从 第 5 秒开始 每 10 秒执行一次,而在 “分” 上则表示从 第 5 秒开始 每 10 分钟执行一次;L
表示英文中的LAST 的意思,只能在 “日”和“周”中使用。在“日”中设置,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年), 在“周”上表示周六,相当于”7”或”SAT”。如果在”L”前加上数字,则表示该数据的最后一个。例如在“周”上设置”7L”这样的格式,则表示“本月最后一个周六”;W
表示离指定日期的最近那个工作日(周一至周五)触发,只能在 “日” 中使用且只能用在具体的数字之后。若在“日”上置”15W”,表示离每月15号最近的那个工作日触发。假如15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发.如果15号正好在工作日(周一至周五),则就在该天触发。如果是 “1W” 就只能往本月的下一个最近的工作日推不能跨月往上一个月推;#
表示每月的第几个周几,只能作用于 “周” 上。例如 ”2#3” 表示在每月的第三个周二。
常用表达式例子
cron表达式 | 描述 |
---|---|
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 10,14,16 * * ? | 每天上午10点,下午2点,4点 |
0 0/30 9-17 * * ? | 朝九晚五工作时间内每半小时 |
0 0 12 ? * WED | 表示每个星期三中午12点 |
0 0 12 * * ? | 每天中午12点触发 |
0 15 10 ? * * | 每天上午10:15触发 |
0 15 10 * * ? | 每天上午10:15触发 |
0 15 10 * * ? | 每天上午10:15触发 |
0 15 10 * * ? 2005 | 2005年的每天上午10:15触发 |
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 10,44 14 ? 3 WED | 每年三月的星期三的下午2:10和2:44触发 |
0 15 10 ? * MON-FRI | 周一至周五的上午10:15触发 |
0 15 10 15 * ? | 每月15日上午10:15触发 |
0 15 10 L * ? | 每月最后一日的上午10:15触发 |
0 15 10 ? * 6L | 每月的最后一个星期五上午10:15触发 |
0 15 10 ? * 6L 2002-2005 | 2002年至2005年的每月的最后一个星期五上午10:15触发 |
0 15 10 ? * 6#3 | 每月的第三个星期五上午10:15触发 |
0/2 * * * * ? | 表示每2秒 执行任务 |
0 0/2 * * * ? | 表示每2分钟 执行任务 |