定时调度

云工作流支持通过配置Cron表达式周期性或指定时间来调度工作流执行。本文介绍如何为云工作流配置定时调度。

前提条件

注意事项

创建的自定义总线以及事件规则的数量超过上限后,将无法再创建定时调度。在单个阿里云账号单个地域维度下,关于创建工作流调度涉及的资源数量的限制,请参见使用限制

通过控制台配置工作流定时调度

  1. 登录云工作流控制台,然后在顶部菜单栏,选择地域。

  2. 工作流列表页面,单击目标工作流。

  3. 工作流详情页面,单击工作流调度页签,然后单击创建工作流调度

  4. 创建工作流调度面板,调度类型选择定时触发,设置相关配置项,然后单击确定

    配置项

    说明

    本文示例

    名称

    填写自定义的定时调度名称。

    schedule-test

    描述

    填写该定时调度的描述信息。

    test schedule

    触发周期

    选择调度时间配置方式,并填写具体的时间规则。

    • 固定周期:配置调度时间周期,即每过多场时间调度工作流执行一次。

    • 自定义 CRON:输入标准的Cron表达式,配置调度时间。关于CRON 表达式的说明和示例,请参见调度时间参数说明

    选择固定周期并设置周期类型为秒,周期时间为30,即每过30秒调度工作流执行一次。

    触发消息

    填写自定义的参数。格式为JSON。

    {"key": "value"}

    说明

    首次创建用户,需要为云工作流调度角色授予AliyunEventBridgeFullAccess的权限,并且还需要开通事件总线EventBrige服务。

创建完成后,您可以在工作流详情页面的工作流调度页签,根据界面提示查看、编辑、删除或禁用/启用工作流。

调度时间参数说明

定时调度的参数格式如下:

{
    UserData: "payload"
    Schedule: "cronExpression"
    TimeZone: "GMT+0:00"
}
  • UserData:您可以自定义执行定时调度的输入,必须为JSON对象。

  • TimeZone:触发周期执行的时区,默认为UTC(GMT+0:00)。北京时间为UTC+8,即GMT+8:00。

  • Schedule:工作流被调度的时间,支持Cron表达式。格式见下表。

    下表为时间表达式常用示例。例如,您希望工作流在北京时间12:00被调度,对应的Cron表达式为0 0 12 * * ?时区为GMT+8:00

    示例

    Cron表达式

    时区

    每天12:00调度函数

    0 0 12 * * ?

    GMT+8:00

    每天12:30调度函数

    0 30 12 * * ?

    GMT+8:00

    每小时的26分、29分、33分调度函数

    0 26,29,33 * * * ?

    GMT+8:00

    周一到周五的每天12:30调度函数

    0 30 12 ? * MON-FRI

    GMT+8:00

    周一到周五的每天12:00~14:00每5分钟调度函数

    0 0/5 12-14 ? * MON-FRI

    GMT+8:00

    一月到四月每天12:00调度函数

    0 0 12 ? JAN,FEB,MAR,APR *

    GMT+8:00

    每年3月的每周三的14:10和14:44触发

    0 10,44 14 ? 3 WED

    GMT+8:00

    每月最后一天23:00触发

    0 0 23 L * ?

    GMT+8:00

    每月最后一个周五10:15触发

    0 15 10 ? * 6L

    GMT+8:00

    每月的第三个周五10:15触发

    0 15 10 ? * 6#3

    GMT+8:00

    • 字段说明

      字段名

      取值范围

      允许的特殊字符

      Seconds

      0~59

      , - * /

      Minutes

      0~59

      , - * /

      Hours

      0~23

      , - * /

      Day-of-month

      1~31

      , - * ?/ L W

      Month

      1~12或JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC

      , - * /

      Day-of-week

      1~7或SUN, MON, TUE, WED, THU, FRI, SAT

      , - * ? / L #

    • 特殊字符说明

      字符名

      定义

      示例

      *

      表示任一,每一。

      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分钟执行一次。

      L

      月份最后一天或星期六,周位上6L表示月份的最后一个周五。

      在Day-of-month字段上使用L,表示取每个月的最后一天,在Day-of-week上使用6L表示月份的最后一个星期五。

      W

      用于日期字段,表示最近的工作日(周一至周五)。

      在Day-of-month上使用1W,表示每月的第一个工作日执行。

      #

      用于星期字段,表示第几个星期几。

      6#3表示每个月的第三个周五。

Input格式

定时调度会按照以下Input格式(推送格式为CloudEvents)来调度您的工作流执行。

{
    "datacontenttype":"application/json;charset=utf-8",
    "aliyunaccountid":"143998900779****",
    "aliyunpublishtime":"2022-09-21T05:00:00.035Z",
    "data":{
        "TimeZone":"GMT+0:00",
        "Schedule":"0/30 * * * * ?",
        "UserData":{
            "key":"value"
        }
    },
    "specversion":"1.0",
    "aliyuneventbusname":"Housekeeping-Bus",
    "id":"d100262d-90c7-4caf-a3b5-813f3526a1f7-****",
    "source":"housekeeping.scheduledevent",
    "time":"2022-09-21T05:00:00Z",
    "aliyunregionid":"cn-beijing",
    "type":"eventbridge:Events:ScheduledEvent"
}{
    "datacontenttype":"application/json;charset=utf-8",
    "aliyunaccountid":"143998900779****",
    "aliyunpublishtime":"2022-09-21T05:00:00.035Z",
    "data":{
        "TimeZone":"GMT+0:00",
        "Schedule":"0/30 * * * * ?",
        "UserData":{
            "key":"value"
        }
    },
    "specversion":"1.0",
    "aliyuneventbusname":"Housekeeping-Bus",
    "id":"d100262d-90c7-4caf-a3b5-813f3526a1f7-****",
    "source":"housekeeping.scheduledevent",
    "time":"2022-09-21T05:00:00Z",
    "aliyunregionid":"cn-beijing",
    "type":"eventbridge:Events:ScheduledEvent"
}
  • UserData:您在调度配置里自定义的输入,在流程定义中可以直接通过$Input.data.UserData来读取。更多信息,请参见输入和输出

  • TimeZone:触发周期执行的时区,默认为UTC(GMT+0:00)。北京时间为UTC+8,即GMT+8:00。

  • Schedule:工作流被调度的时间,支持Cron表达式。