全部產品
Search
文件中心

CloudFlow:建立定時調度

更新時間:Jul 06, 2024

Serverless 工作流程支援通過配置Cron運算式來定時調度工作流程的執行。本文介紹如何為Serverless 工作流程建立定時調度。

前提條件

成功建立工作流程

使用控制台建立定時調度

  1. 登入Serverless工作流程控制台

  2. 進入流程頁面,在流程列表中單擊目標流程的流程名稱

    workflow-name

  3. 流程頁面,單擊定時調度頁簽,在定時調度管理地區,單擊建立定時調度

    image

  4. 建立定時調度面板填寫相關參數,然後單擊確定

    參數

    操作

    本文樣本

    定時調度名稱

    填寫自訂的定時調度名稱。

    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": "2024-06-26T03:36:57Z",
            "CronExpression": "@every 1m",
            "Description": "test schedule",
            "Enable": true,
            "LastModifiedTime": "2024-06-26T03:36:57Z",
            "Payload": "{\"key\":\"value\"}",
            "RequestId": "c7034d83-d1ba-648c-f05c-156439a857d7",
            "ScheduleId": "b888a48f-229d-4b35-adc6-5c63a37cf3b1",
            "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來讀取。更多資訊,請參見輸入和輸出