Serverless工作流支持通过配置Cron表达式来定时调度工作流的执行。本文介绍如何为Serverless工作流创建定时调度。

前提条件

成功创建工作流

使用控制台创建定时调度

  1. 登录Serverless工作流控制台
  2. 在左侧导航栏,单击流程
  3. 在流程列表中单击目标流程的流程名称。
    workflow-name
  4. 流程页面,单击定时调度页签,在定时调度管理区域,单击创建定时调度
    create-trigger
  5. 创建定时调度面板填写相关参数,然后单击确定
    参数 操作 本文示例
    定时调度名称 填写自定义的定时调度名称。 schedule-test
    触发时间配置 选择调度时间配置方式,并填写具体的时间规则。

    定时调度规则支持以下两种表达式:

    • Cron表达式:使用标准的Cron表达式配置调度时间。更多信息,请参见调度时间参数说明
    • 时间间隔:使用@every表达式配置调度时间。

      以分钟为单位填写工作流被调度的时间间隔。

    选择时间间隔并填写时间间隔为1。表示每1分钟调度工作流执行一次。
    触发消息 填写自定义的参数。格式为JSON。 {"key": "value"}
    描述 填写该定时调度的描述信息。 test schedule
    启动定时调度 打开或关闭定时调度。 打开启用定时调度开关。
    • 创建完成后,您可以在目标工作流的定时调度页签查看已创建的定时调度。create-result
    • 在目标工作流的执行页签,您可以看到该工作流的定时执行记录。在本示例中,工作流每分钟执行一次。execution-result

使用命令行工具创建定时调度

在使用命令行工具创建定时调度前,您需要安装和配置阿里云命令行工具CLI。详细信息,请参见什么是阿里云CLI?

  1. 可选:执行以下命令查看创建定时调度API的请求参数。
    aliyun fnf CreateSchedule help

    预期输出:

    Alibaba Cloud Command Line Interface Version 3.0.45
    
    Product: fnf (FunctionFlow)
    Link:    https://xxxxxxxx.html
    
    Parameters:
      --CronExpression String  Required
      --FlowName       String  Required
      --ScheduleName   String  Required
      --Description    String  Optional
      --Enable         Boolean Optional
      --Payload        String  Optional
      --RequestId      String  Optional
  2. 执行以下命令创建定时调度。
    aliyun fnf CreateSchedule --FlowName test --ScheduleName "schedule-test" --CronExpression "@every 1m" --Payload "{\"key\":\"value\"}" --Description "test schedule" --Enable true

    预期输出:

    {
        "CreatedTime": "2020-05-22T09:22:03Z",
        "CronExpression": "@every 1m",
        "Description": "test schedule",
        "Enable": true,
        "LastModifiedTime": "2020-05-22T09:22:03Z",
        "Payload": "{\"key\":\"value\"}",
        "RequestId": "63ba5895-ef49-b262-cde6-************",
        "ScheduleId": "978be20f-cceb-4677-935c-************",
        "ScheduleName": "schedule-test"
    }

调度时间参数说明

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

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

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来读取。更多信息,请参见输入和输出