共用方式為


Azure Logic Apps 工作流程中週期性觸發程序的排程

適用於:Azure Logic Apps (使用量 + 標準)

Azure Logic Apps 協助您建立和依排程執行自動化週期性工作流程。 透過建立以週期觸發程序或滑動視窗觸發程序 (其為排程類型觸發程序) 開始的邏輯應用程式工作流程,您可以立即、稍後或依間隔反覆執行工作。 您可以在 Azure 內外呼叫服務 (例如 HTTP 或 HTTPS 端點)、將訊息張貼至 Azure 服務 (例如 Azure 儲存體和 Azure 服務匯流排),或將檔案上傳至檔案共用。 您也可以使用週期觸發程序,以設定複雜的排程和進階週期來執行工作。 若要深入了解排程內建觸發程序和動作,請參閱排程觸發程序排程動作

以下清單顯示您可以使用排程內建觸發程序執行的一些範例工作:

  • 取得內部資料,例如每天執行 SQL 預存程序。

  • 取得外部資料,例如每 15 分鐘從 NOAA 提取氣象報告。

  • 傳送報告資料,例如將上週大於指定金額的所有訂單以電子郵件寄送摘要。

  • 處理資料,例如在每個工作日的離峰時間壓縮當天上傳的影像。

  • 清理資料,例如刪除三個月前的所有推文。

  • 封存資料,例如每天上午 1:00 將發票推送至備份服務來保存九個月。

您也可以使用排程內建動作,在下一個動作執行之前暫停工作流程,例如:

  • 等到工作日再透過電子郵件傳送狀態更新。

  • 延遲工作流程,直到 HTTP 呼叫有時間來完成,才繼續進行並擷取結果。

本指南描述了排程類型內建觸發程序和動作的功能。

在沒有多個邏輯應用程式的情況下執行週期性工作負載

您可以排程和執行週期性工作負載,而不需要為每個排程工作建立個別的取用邏輯應用程式,也不會受到每個區域和訂用帳戶的工作流程限制。 相反地,您可以建立具有多個工作流程的標準邏輯應用程式,或使用由 Azure 快速入門範本:Logic Apps 工作排程器所建立的取用邏輯應用模式。

Azure Logic Apps 工作排程器範本會建立一個名為 CreateTimerJob 的邏輯應用程式,該邏輯應用程式會呼叫 TimerJob 邏輯應用程式。 然後,您可以發出 HTTP 要求,並傳遞排程作為要求的輸入,以 API 的形式呼叫 CreateTimerJob 邏輯應用程式。 每次呼叫 CreateTimerJob 邏輯應用程式也會呼叫 TimerJob 邏輯應用程式,而這會建立新的 TimerJob 執行個體,以根據指定的排程持續執行或直到符合指定的限制為止。 因此,想執行多少個 TimerJob 執行個體就執行多少個,不必擔心工作流程限制,因為執行個體不是個別邏輯應用程式工作流程的定義或資源。

排程觸發程序

您可以使用週期觸發程序滑動視窗觸發程序 (與任何特定服務或系統無關) 來啟動邏輯應用程式工作流程。 這些觸發程序根據您指定的週期來啟動和執行工作流程,由您選取間隔和頻率,例如秒數、分鐘數、時數、天數、週數或月數。 您也可以設定開始日期和時間及時區。 觸發程序每次引發時,Azure Logic Apps 會為您的邏輯應用程式建立並執行新的工作流程執行個體。

以下是這些觸發程序之間的差異:

  • 週期:根據您的指定排程定期執行工作流程。 如果觸發程序錯過週期,例如因為中斷或停用工作流程,則週期觸發程序不會處理錯過的週期,而是從下一個排程間隔重新起算週期。

    如果您選取作為頻率,則可以指定幾點幾分,例如每天 2:30。 如果您選取作為頻率,則也可以選取星期幾,例如星期三和星期六。 您也可以為週期排程指定開始日期和時間及時區。 如需時區格式的詳細資訊,請參閱新增週期觸發程序

    重要

    如果您使用頻率,並指定未來的日期和時間,請務必提前設定週期:

    • :至少提前 24 小時設定每日週期。

    • :至少提前 7 天設定每週週期。

    • :至少提前一個月設定每月週期。

    否則,工作流程可能錯過第一個週期。

    如果週期未指定特定的開始日期和時間,則無論觸發程序的週期如何設定,您儲存或部署邏輯應用程式時就會立即執行第一個週期。 若要避免這種行為,請提供您希望第一個週期執行時的開始日期和時間。

    如果週期未指定其他任何進階排程選項,例如執行未來週期的特定時間,則這些週期會根據上次執行時間。 因此,這些週期的開始時間可能會因為儲存體呼叫期間延遲等因素而漂移。 為了確保工作流程不會錯過週期,特別是當頻率為天數或更長時,請嘗試下列選項:

    • 使用名為在這幾小時內在這幾分鐘內的屬性 (僅適用於頻率),提供週期的開始日期和時間,以及執行後續週期的特定時間。

    • 使用滑動視窗觸發程序,而不是週期觸發程序。

    如需詳細資訊,請參閱使用週期觸發程序來建立、排程及執行週期性工作和工作流程

  • 滑動視窗:定期以連續區塊處理資料來執行工作流程。 如果觸發程序錯過週期,例如因為中斷或停用工作流程,滑動視窗觸發程序會返回處理錯過的週期。

    您可以指定開始日期和時間、時區及持續時間,以延遲工作流程中的每個週期。 此觸發程序不支援進階排程,例如幾點、幾分和星期幾。 如需詳細資訊,請參閱使用滑動視窗觸發程序來建立、排程及執行週期性工作和工作流程

注意

進階排程選項 (例如在這些小時在這些天) 僅可用且適用於內建輪詢觸發程序 (例如週期滑動視窗觸發程序,其會直接與 Azure Logic Apps 執行階段間一起執行)。 對於由 Microsoft 管理、託管並在 Azure 中執行的連接器,輪詢觸發程序只會使用間隔頻率值 (而非進階排程選項) 來計算下一個週期。

排程動作

在邏輯應用程式工作流程中執行任何動作之後,您可以使用「延遲」和「延遲直到」動作,讓工作流程在下一個動作執行之前等候。

開始日期和時間的模式

以下一些模式說明如何以開始日期和時間來控制週期,以及 Azure Logic Apps 如何執行這些週期:

開始時間 週期性無排程 排程有週期 (僅限週期觸發程序)
{無} 立即執行第一個工作負載。

根據上次執行的時間執行未來的工作負載。

立即執行第一個工作負載。

根據指定的排程執行未來的工作負載。

過去的開始時間 週期觸發程序:根據指定的開始時間計算執行時間,並捨棄過去的執行時間。

在未來的下一個執行時間執行第一個工作負載。

根據上次執行的時間執行未來的工作負載。

滑動視窗觸發程序:根據指定的開始時間計算執行時間,並遵守過去的執行時間。

根據指定的開始時間執行未來的工作負載。

如需詳細說明,請參閱本表格後的範例。

根據從開始時間計算的排程,在開始時間「之後」才執行第一個工作負載

根據指定的排程執行未來的工作負載。

注意:如果您指定的週期有排程,但未指定排程在幾點或幾分,Azure Logic Apps 會分別使用第一次執行時間起的時數或分鐘數來計算未來的執行時間。

現在或未來的開始時間 在指定的開始時間執行第一個工作負載。

週期觸發程序:根據上次執行時間執行未來的工作負載。

滑動視窗觸發程序:根據指定的開始時間執行未來的工作負載。

根據從開始時間計算的排程,在開始時間「之後」才執行第一個工作負載

根據指定的排程執行未來的工作負載。 如果您使用頻率,並指定未來的日期和時間,請務必提前設定週期:

- :至少提前 24 小時設定每日週期。

- :至少提前 7 天設定每週週期。

- :至少提前一個月設定每月週期。

否則,工作流程可能錯過第一個週期。

注意:如果您指定的週期有排程,但未指定排程在幾點或幾分,Azure Logic Apps 會分別使用第一次執行時間起的時數或分鐘數來計算未來的執行時間。

過去的開始時間和週期但無排程的範例

假設目前的日期和時間是 2017 年 9 月 8 日下午 1:00。 您指定開始日期和時間為 2017 年 9 月 7 日下午 2:00 (已過去),以及每兩天執行的週期。

開始時間 目前時間 週期 排程
2017-09-07T14:00:00Z
(2017-09-07 下午 2:00)
2017-09-08T13:00:00Z
(2017-09-08 下午 1:00)
每兩天 {無}

針對週期觸發程序,Azure Logic Apps 引擎會根據開始時間計算執行時間、捨棄過去的執行時間、使用下一個未來的開始時間決定第一次執行,並根據上次執行時間計算未來的執行。

此週期看起來如下:

開始時間 第一次執行時間 未來的執行時間
2017-09-07下午 2:00 2017-09-09下午 2:00 2017-09-11 下午 2:00
2017-09-13 下午 2:00
2017-09-15 下午 2:00
等等...

無論您指定的開始時間是多久以前,例如 2017-09-05 下午 2:00 或 2017-09-01 下午 2:00,第一次執行一定使用下一個未來的時間。

針對滑動視窗觸發程序,Logic Apps 引擎會根據開始時間計算執行時間、遵守過去的執行時間、使用開始時間決定第一次執行,並根據開始時間計算未來的執行。

此週期看起來如下:

開始時間 第一次執行時間 未來的執行時間
2017-09-07下午 2:00 2017-09-08 下午 1:00 (目前時間) 2017-09-09 下午 2:00
2017-09-11 下午 2:00
2017-09-13 下午 2:00
2017-09-15 下午 2:00
等等...

無論您指定的開始時間是多久以前,例如 2017-09-05 下午 2:00 或 2017-09-01 下午 2:00,第一次執行一定使用指定的開始時間。

週期行為

週期性內建觸發程序 (例如週期觸發程序) 會直接在 Azure Logic Apps 執行階段上原生執行。 這些觸發程序與週期性連線的受控連接器觸發程序不同,您需要先建立連線,例如 Office 365 Outlook 受控連接器觸發程序。

針對這兩種觸發程序,若週期未指定開始日期與時間,則無論觸發程序的週期設定為何,第一個週期都會在您儲存或部署邏輯應用程式資源時立即執行。 若要避免這種行為,請提供您希望第一個週期執行時的開始日期和時間。

內建觸發程序的週期

週期性內建觸發程序會遵循您設定的排程,包含任何指定的時區。 不過,如果週期並未指定其他進階排程選項,例如執行未來週期的特定時間,則這些週期會以最後一個觸發程序執行為基礎。 因此,這些週期的開始時間可能會因為儲存體呼叫期間延遲等因素而漂移。 進階排程選項 (例如用於每週週期的在這些小時在這些天) 僅可用且適用於內建輪詢觸發程序 (例如週期滑動視窗觸發程序,其會直接在 Azure Logic Apps 執行階段上原生執行)。

如需詳細資訊,請參閱下列文件:

受控觸發程序的週期

對於週期性受控觸發程序 (例如 Office 365 Outlook、Outlook.com 等等),排程並不是控制執行的唯一驅策因素。 時區只會決定初始開始時間。 後續執行取決於週期排程、上次觸發程序執行,以及可能導致執行階段漂移或產生非預期行為的其他因素,例如:

  • 無論觸發程序是否存取具有更多資料的伺服器,觸發程序會立即嘗試擷取。
  • 觸發程序所產生的任何失敗或重試。
  • 儲存體呼叫期間的延遲。
  • 當日光節約時間 (DST) 開始和結束時,系統不會維護指定的排程。
  • 下一次執行階段發生時可能產生影響的其他因素。

進階排程選項 (例如用於每週週期的在這些小時在這些天) 對於由 Microsoft 管理、託管並在 Azure 中執行的連接器無法使用或不受支援。 這些輪詢觸發程序只會使用間隔頻率值來計算下一個週期。

如需詳細資訊,請參閱下列文件:

日光節約時間與標準時間的觸發程序週期

為了排程作業,Azure Logic Apps 會將需要處理的訊息放入佇列中,並根據上次作業執行的 UTC 時間,以及排定下一個作業執行的 UTC 時間,指定該訊息何時出現。 如果您指定週期的開始時間,「請務必選取時區」,讓邏輯應用程式工作流程在指定的開始時間執行。 如此,邏輯應用程式的 UTC 時間也會調整以抵消季節性時間變更。 週期性觸發程序會遵守您設定的排程,包括您指定的任何時區。

若您未選取時區,日光節約時間 (DST) 事件可能會影響觸發程序何時執行。 例如,DST 開始時,開始時間會調快一小時,DST 結束時則調慢一小時。

日光節約時間與標準時間期間的觸發程序週期移位與漂移

針對週期性連線的觸發程序,週期排程不是控制執行的唯一驅策因素。 時區只會決定初始開始時間。 後續執行取決於週期排程、上次觸發程序執行,以及可能導致執行階段漂移或產生非預期行為的其他因素,例如:

  • 無法在日光節約時間 (DST) 開始與結束時維持指定的排程。
  • 下一次執行階段發生時可能產生影響的其他因素。
  • 儲存體呼叫期間的延遲。
  • 無論觸發程序是否存取具有更多資料的伺服器,觸發程序會立即嘗試擷取。
  • 觸發程序所產生的任何失敗或重試。

若要確定當 DST 生效時,週期時間不會移位,請手動調整週期。 如此一來,您的工作流程就會繼續在預期或指定的開始時間執行。 否則,當 DST 啟動時,開始時間會向前移位一小時,而 DST 結束時則會向後移位一小時。

注意

在上午 2:00 到上午 3:00 之間開始的觸發程序可能有問題,因為 DST 是在上午 2:00 改變,這可能導致開始時間失效或不明確。 如果有多個邏輯應用程式在相同的不明確間隔內,則可能重疊。 因此,最好避免開始時間在上午 2:00 到上午 3:00 之間。

例如,假設您有兩個每日執行的邏輯應用程式。 其中一個邏輯應用程式在當地時間上午 1:30 執行,另一個邏輯應用程式在當地時間一小時之後上午 2:30 執行。 當 DST 開始和結束時,這些應用程式的開始時間會怎麼樣?

  • 如果時間調快一小時,觸發程序還是會執行嗎?

  • 如果時間調慢一小時,觸發程序會執行兩次嗎?

如果這些邏輯應用程式使用 UTC-6:00 中部時區 (美國及加拿大),此模擬示範 2019 年 UTC 時間如何調整以抵消 DST 變化,視需要調快或調慢一小時,讓應用程式以預期的當地時間繼續執行,而不會錯過或重複執行。

  • 2019/03/10:DST 從上午 2:00 開始,時間調快一小時

    在 DST 開始之後為了抵消,UTC 時間調慢一小時,讓邏輯應用程式以相同的當地時間繼續執行:

    • 邏輯應用程式 #1

      Date 時間 (當地) 時間 (UTC) 備註
      2019/03/09 上午 1:30:00 上午 7:30:00 UTC 在 DST 生效日之前。
      2019/03/10 上午 1:30:00 上午 7:30:00 因為 DST 尚未生效,UTC 相同。
      2019/03/11 上午 1:30:00 6:30:00 AM DST 生效之後,UTC 調快一小時。
    • 邏輯應用程式 #2

      Date 時間 (當地) 時間 (UTC) 備註
      2019/03/09 上午 2:30:00 上午 8:30:00 UTC 在 DST 生效日之前。
      2019/03/10 上午 3:30:00* 上午 8:30:00 DST 已生效,因為 UTC-6:00 時區變成 UTC-5:00,所以當地時間已調快一小時。 如需詳細資訊,請參閱在上午 2:00 到上午 3:00 之間開始的觸發程序
      2019/03/11 上午 2:30:00 上午 7:30:00 DST 生效之後,UTC 調快一小時。
  • 2019/11/03:DST 在上午 2:00 結束,時間調慢一小時

    為了抵消,UTC 時間調快一小時,讓邏輯應用程式以相同的當地時間繼續執行:

    • 邏輯應用程式 #1

      Date 時間 (當地) 時間 (UTC) 備註
      2019/11/02 上午 1:30:00 6:30:00 AM
      2019/11/03 上午 1:30:00 6:30:00 AM
      2019/11/04 上午 1:30:00 上午 7:30:00
    • 邏輯應用程式 #2

      Date 時間 (當地) 時間 (UTC) 備註
      2019/11/02 上午 2:30:00 上午 7:30:00
      2019/11/03 上午 2:30:00 上午 8:30:00
      2019/11/04 上午 2:30:00 上午 8:30:00

僅執行一次

若要在未來只執行一次工作流程,您可以使用排程器:執行一次作業工作流程範本

在當月的最後一天執行一次

若要只在當月的最後一天執行一次週期觸發程序,請參閱在當月的最後一天執行一次

範例週期

以下是您可以為觸發程序設定的各種範例週期,支援一些選項:

觸發程序 週期 間隔 頻率 開始時間 在這些日子 在這幾小時內 在這幾分鐘內 注意
週期、
滑動視窗
每隔 15 分鐘執行一次 (沒有開始日期和時間) 15 Minute {無} {無法使用} {無} {無} 此排程會立即開始,然後根據上次執行的時間計算未來的週期。
週期、
滑動視窗
每隔 15 分鐘執行一次 (有開始日期和時間) 15 Minute startDateTstartTimeZ {無法使用} {無} {無} 此排程不會「早於」指定的開始日期和時間開始,並且會根據上次執行的時間計算未來的週期。
週期、
滑動視窗
整點每小時執行一次 (有開始日期和時間) 1 Hour startDateThh:00:00Z {無法使用} {無} {無} 此排程不會「早於」指定的開始日期和時間開始。 未來的週期在每小時的 "00" 分鐘刻度執行,這是 Azure Logic Apps 從開始時間計算。

如果頻率是 [週] 或 [月],則此排程只會分別在每週的一天或每個月的一天執行。

週期、
滑動視窗
每天的每個小時執行一次 (沒有開始日期和時間) 1 Hour {無} {無法使用} {無} {無} 此排程會立即開始,然後根據上次執行的時間計算未來的週期。

如果頻率是 [週] 或 [月],則此排程只會分別在每週的一天或每個月的一天執行。

週期、
滑動視窗
每天的每個小時執行一次 (有開始日期和時間) 1 Hour startDateTstartTimeZ {無法使用} {無} {無} 此排程不會「早於」指定的開始日期和時間開始,並且會根據上次執行的時間計算未來的週期。

如果頻率是 [週] 或 [月],則此排程只會分別在每週的一天或每個月的一天執行。

週期、
滑動視窗
每小時的整點過後,每隔 15 分鐘執行一次 (有開始日期和時間) 1 Hour startDateT00:15:00Z {無法使用} {無} {無} 此排程不會「早於」指定的開始日期和時間開始。 未來的週期在 "15" 分鐘刻度執行,這是 Logic Apps 從開始時間計算,也就是上午 00:15、上午 1:15、上午 2:15 等等。
週期 每小時的整點過後,每隔 15 分鐘執行一次 (沒有開始日期和時間) 1 Day {無} {無法使用} 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 15 此排程在上午 00:15、上午 1:15、上午 2:15 (依此類推) 執行。 而且,此排程相當於「小時」的頻率,且開始時間為 "15" 分鐘。
週期 在指定的分鐘刻度每 15 分鐘執行一次 (沒有開始日期和時間)。 1 Day {無} {無法使用} 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 0, 15, 30, 45 此排程會在到達下一個指定的 15 分鐘標記處開始。
週期 從您儲存邏輯應用程式起,在每天上午 8 點「加」分鐘刻度執行 1 Day {無} {無法使用} 8 {無} 沒有開始日期和時間,此排程根據您儲存邏輯應用程式 (PUT 作業) 的時間執行。
週期 每天上午 8:00 執行 (有開始日期和時間) 1 Day startDateT08:00:00Z {無法使用} {無} {無} 此排程不會「早於」指定的開始日期和時間開始。 未來的週期在每天上午 8:00 執行。
週期 每天上午 8:00 執行 (沒有開始日期和時間) 1 Day {無} {無法使用} 8 00 此排程在每天上午 8:00 執行。
週期 每天上午 8:00 和下午 4:00 執行 1 Day {無} {無法使用} 8, 16 0
週期 每天上午 8:30、上午 8:45、下午 4:30 和下午 4:45 執行 1 Day {無} {無法使用} 8, 16 30, 45
週期 每個星期六下午 5:00 執行 (沒有開始日期和時間) 1 {無} "Saturday" 17 0 此排程在每個星期六的下午 5:00 執行。
週期 每個星期六下午 5:00 執行 (有開始日期和時間) 1 startDateT17:00:00Z "Saturday" {無} {無} 此排程不會「早於」指定的開始日期和時間開始,在此案例中是 2017 年 9 月 9 日下午 5:00。 未來會在每個星期六的下午 5:00 重複執行。
週期 從您儲存邏輯應用程式起,在每個星期二、星期四下午 5 點「加」分鐘刻度執行 1 {無} "Tuesday", "Thursday" 17 {無}
週期 在工作時間內每小時執行一次。 1 {無} 選取除了星期六和星期日以外的所有日子。 選取您想要的整點。 選取您想要的任何分鐘。 例如,如果您的工作時間是上午 8:00 到下午 5:00,請選取 "8, 9, 10, 11, 12, 13, 14, 15, 16, 17" 當作幾點,「加」"0" 當作幾分。
週期 週末每天執行一次 1 {無} "Saturday", "Sunday" 選取您想要的整點。 視需要選取任何分鐘。 此排程會在每個星期六和星期日的指定排程執行。
週期 只在隔週星期一的每隔 15 分鐘執行一次 2 {無} "Monday" 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 0, 15, 30, 45 此排程會在每個其他星期一的每隔 15 分鐘標記處執行一次。
週期 每月執行一次 1 Month startDateTstartTimeZ {無法使用} {無法使用} {無法使用} 此排程不會比指定的開始日期和時間「更早」開始,但會根據開始日期和時間計算未來的週期。 如果您未指定開始日期和時間,則此排程會使用建立日期和時間。
週期 每個月其中一天的每小時執行一次 1 Month {請參閱注意} {無法使用} 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 {請參閱注意} 如果您未指定開始日期和時間,則此排程會使用建立日期和時間。 若要控制重複排程的分鐘,請指定分鐘、開始時間,或使用建立時間。 例如,如果開始時間或建立時間是上午 8:25,則此排程會在上午 8:25、上午 9:25、上午 10:25 (依此類推) 執行。

針對週期問題進行疑難排解

若要確定您的工作流程是在指定的開始時間執行,且不會錯過週期,特別是當頻率為天數或更長時,請嘗試下列解決方案:

  • 當 DST 生效時,請手動調整週期,讓您的工作流程在預期的時間繼續執行。 否則,當 DST 啟動時,開始時間會向前移位一小時,而 DST 結束時則會向後移位一小時。 如需詳細資訊和範例,請檢閱日光節約時間和標準時間的週期

  • 如果您使用週期觸發程序,請指定時區、開始日期和開始時間。 此外,請設定特定時間,以在屬性 [在這幾小時內] 和 [在這幾分鐘內] 中執行後續的週期,這些時間僅適用於 [日] 和 [週] 頻率。 不過,某些時間範圍可能會在時間移位時造成問題。

  • 請考慮使用滑動視窗觸發程序,而非週期觸發程序,以避免遺漏的週期。

下一步