Skip to content

定时任务

概述

定时任务是一种预设任务,在特定的时间点执行预设的 自动化 程序或者脚本。例如每天早上10点钟,查询超时的任务,并且发送催办邮件。

定时任务的精度为 1分钟,也就是说所有的定时任务在执行时都会有+(0 - 60秒)的延迟。

ℹ️ 提示

在同一时刻只会有一个定时任务执行。例如我们配置了发送邮件的定时任务,每间隔五分钟执行一次,假设第一次执行时0:00,执行的过程耗时6分钟, 那么计划中本该在0:05执行的自动化就会被取消执行。

ℹ️ 重要信息

定时任务执行的自动化程序必须是不包含交互式步骤的

触发类型

在织信低代码平台中,定时任务的类型主要有以下两种:

  1. 默认(周期触发):这种类型的定时任务按照预设的周期性时间间隔自动触发。例如,可以设置任务每小时、每天或每周触发一次。

  2. cron表达式:这种类型的定时任务使用Cron表达式来定义复杂的时间调度规则。Cron表达式是一种字符串格式,用于表示时间表,允许用户精确地定义任务在特定时间点或时间间隔内触发。

示例

  • 默认(周期触发)

    • 每天凌晨1点触发任务。
    • 每周一早上8点触发任务。
  • cron表达式

    • 0 0 1 * * ?:每天凌晨1点触发任务。
    • 0 0 8 ? * MON:每周一早上8点触发任务。

创建定时任务的步骤

  1. 选择定时任务类型:在创建定时任务时,首先选择任务的触发类型是“默认(周期触发)”还是“Cron表达式”。
  2. 配置触发时间:根据选择的类型,配置相应的时间参数。如果选择“默认(周期触发)”,则设置周期时间;如果选择“Cron表达式”,则输入Cron表达式。
  3. 设置任务内容:定义定时任务需要执行的具体操作,例如调用自动化步骤、调用脚本。

通过使用这两种类型的定时任务,用户可以灵活地安排和管理任务的执行时间,满足各种业务需求。

失火策略

在织信低代码平台中,定时任务的失火策略(Misfire Policy)是指当定时任务由于某种原因没有在预定的时间触发时,系统如何处理这种情况。常见的失火策略包括以下几种:

  1. 立即执行所有未触发 任务,然后触发器再按计划运行:当任务错过触发时间后,一旦系统恢复运行,立即执行错过的任务。
  2. 丢弃所有未触发任务,然后在触发器一下个调度周期按计划运行:当任务错过触发时间后,放弃此次执行,等待下一个触发时间。

示例

  • 立即执行:任务原定于每天凌晨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 * * ? 20052005年的每天上午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-20052002年至2005年的每月的最后一个星期五上午10:15触发
0 15 10 ? * 6#3每月的第三个星期五上午10:15触发
0/2 * * * * ?表示每2秒 执行任务
0 0/2 * * * ?表示每2分钟 执行任务