Serverless工作流支持通过配置Cron表达式来定时调度工作流的执行。本文介绍如何为Serverless工作流创建定时调度。
前提条件
使用控制台创建定时调度
使用命令行工具创建定时调度
在使用命令行工具创建定时调度前,您需要安装和配置阿里云命令行工具CLI。详细信息,请参见什么是阿里云CLI?。
调度时间参数说明
定时调度的参数格式如下:
{
payload: "payload"
cronExpression: "cronExpression"
enable: true|false
}
- payload:您可以自定义执行定时调度的输入,必须为JSON格式。
- cronExpression:工作流被调度的时间,支持以下两种表达式。
说明 定时调度允许的最小调度时间间隔为1分钟。如果配置的时间间隔小于1分钟会被认为是非法输入。
- @every Value Unit
表示每隔Value Unit时间调度一次工作流执行。其中Value为一个正整数,Unit为单位“m”。
场景示例 表达 每隔5分钟调度一次 @every 5m 每隔1.5小时调度一次 @every 90m - 时间表达式
- Cron表达式
Cron表达式默认以UTC时间运行,即北京时间减去8小时。标准的Cron表达式:
Seconds Minutes Hours Day-of-month Month Day-of-week
。 - 时区表达式
如果您的任务需要按照特定时区运行,可以通过CRON_TZ指定,例如在北京时间每个月一号的凌晨四点触发流程,则可以使用
CRON_TZ=Asia/Shanghai 0 0 4 1 * *
。说明如果您使用的时区存在夏令时和冬令时的区分,在夏令时和冬令时切换的过程中可能会出现重复执行或少执行的情况,建议将执行时间设置在夏令时和冬令时切换的时间段外。
下表为时间表达式常用示例。例如您希望工作流在北京时间12:00被调度,对应的Cron表达式为
0 0 4 * * *
,时区表达式为CRON_TZ=Asia/Shanghai 0 0 12 * * *
。示例 Cron表达式 时区表达式 每天12:00调度函数 0 0 4 * * *
CRON_TZ=Asia/Shanghai 0 0 12 * * *
每天12:30调度函数 0 30 4 * * *
CRON_TZ=Asia/Shanghai 0 30 12 * * *
每小时的26分,29分,33分调度函数 0 26,29,33 * * * *
CRON_TZ=Asia/Shanghai 0 26,29,33 * * * *
周一到周五的每天12:30调度函数 0 30 4 ? * MON-FRI
CRON_TZ=Asia/Shanghai 0 30 12 ? * MON-FRI
周一到周五的每天12:00~14:00每5分钟调度函数 0 0/5 4-6 ? * MON-FRI
CRON_TZ=Asia/Shanghai 0 0/5 12-14 ? * MON-FRI
一月到四月每天12:00调度函数 0 0 4 ? JAN,FEB,MAR,APR *
CRON_TZ=Asia/Shanghai 0 0 12 ? JAN,FEB,MAR,APR *
- 字段说明
字段名 取值范围 允许的特殊字符 Seconds 0~59 无 Minutes 0~59 , - * / Hours 0~23 , - * / Day-of-month 1~31 , - * ?/ Month 1~12或JAN~DEC , - * / Day-of-week 1~7或MON~SUN , - * ? - 特殊字符说明
字符名 定义 示例 * 表示任一,每一。 在Minutes字段中:0表示每分钟的0秒都执行。 , 表示列表值 在Day-of-week字段中:MON,WED,FRI表示星期一,星期三和星期五。 - 表示一个范围 在Hours字段中:10-12表示UTC时间从10点到12点。 ? 表示不确定的值 与其他指定值一起使用。例如指定了一个特定的日期,但您不在乎他是星期几,那么在Day-of-week字段中就可以使用。 / 表示一个值的增加幅度,n/m表示从n开始,每次增加m。 在minute字段中:3/5表示从3分开始,每隔5分钟执行一次。
- Cron表达式
- @every Value Unit
Input格式
定时调度会按照以下Input格式来调度您的工作流执行。
{
"triggerTime": "2020-01-01T00:00:00Z",
"triggerName": "time-trigger",
"payload": {
"key": "value",
"key_int": 1
}
}
- triggerTime:工作流被调度的时间,一个工作流在指定的时间点可能会被调度多次,您可以根据时间值做去重处理。
- triggerName:定时调度名称。
- payload:您在调度配置里自定义的输入,工作流会将输入的JSON字符串展开为JSON dict格式,在流程定义中可以直接通过
$.payload.key
来读取。更多信息,请参见输入和输出。