在 Azure App Service 中使用 WebJobs 執行背景工作

使用 Azure 入口網站 來部署 WebJobs,以便上傳可執行檔或指令碼。 您可以在 Azure App Service 中執行背景工作。

如果您使用 Visual Studio 來開發和部署 WebJobs,而不是Azure App 服務,請參閱使用 Visual Studio 部署 WebJobs

概述

WebJobs 是一項 Azure App Service 功能,可讓您在與 Web 應用程式、API 應用程式或行動應用程式相同的執行個體中執行程式或指令碼。 使用 WebJobs 不需要額外費用。

Azure WebJobs SDK 可以搭配 WebJobs 使用來簡化程式設計工作。 Linux 上的 App Service尚不支援 WebJobs。 如需詳細資訊,請參閱 什麼是 WebJobs SDK

Azure Functions 提供另一種方式來執行程式和指令碼。 如需 WebJobs 和函式之間的比較,請參閱在 Flow、Logic Apps、Functions 和 WebJobs 之間做選擇

WebJob 類型

下表描述連續和觸發 WebJobs 之間的差異。

連續 觸發
建立 WebJob 時立即啟動。 為了避免結束作業,程式或指令碼通常會在無限迴圈中執行其工作。 如果作業結束,您可以重新啟動。 通常與 WebJobs SDK 搭配使用。 只在手動或排程觸發時才啟動。
在 Web 應用程式執行所在的所有執行個體上執行。 您可以選擇性地將 WebJob 限制為單一執行個體。 在 Azure 選取來進行負載平衡的單一執行個體上執行。
支援遠端偵錯。 不支援遠端偵錯。
會在 \site\wwwroot\app_data\Jobs\Continuous 下方部署程式碼。 會在 \site\wwwroot\app_data\Jobs\Triggered 下方部署程式碼。

注意

Web 應用程式會在閒置超過 20 分鐘後逾時,而且只有針對實際 Web 應用程式的要求,才可重設計時器。 在 Azure 入口網站中檢視應用程式的組態,或者對進階工具網站 (https://<app_name>.scm.azurewebsites.net) 提出要求,並不會重設計時器。 如果您設定裝載工作的 Web 應用程式為持續執行、依排程執行或使用事件驅動觸發程序,請在 Web 應用程式的 Azure [設定] 頁面上啟用 [一律開啟] 設定。 [一律開啟] 設定有助於確保這些類型的 WebJobs 得以可靠地執行。 這項功能僅適用於基本、標準和進階定價層

指令碼或程式支援的檔案類型

支援下列檔案類型:

  • .cmd、.bat、.exe (使用 Windows 命令提示字元)
  • .ps1 (使用 PowerShell)
  • .sh (使用 Bash)
  • .php (使用 PHP)
  • .py (使用 Python)
  • .js (使用 Node.js)
  • .jar (使用 Java)

建立連續 WebJob

重要事項

當您為應用程式設定原始檔控制時,Webjobs 應該作為原始檔控制整合的一部分進行部署。 在為您的應用程式設定原始檔控制後,就無法從 Azure 入口網站新增 WebJob。

  1. Azure 入口網站中,移至 App Service Web 應用程式、API 應用程式或行動裝置應用程式的 [App Service] 分頁。

  2. 從左窗格中,選取 [WebJobs],然後選取 [ 新增]。

    顯示如何在入口網站中App Service應用程式中新增 WebJob 的螢幕擷取畫面。

  3. 填入資料表中指定的 [新增 WebJob 設定],然後選取 [ 建立 Webjob]。

    顯示如何為 App Service 應用程式設定 mult 實例連續 WebJob 的螢幕擷取畫面。

    設定 範例值 描述
    名稱 myContinuousWebJob App Service 應用程式中唯一的名稱。 必須以字母或數位開頭,且不得包含 「-」 和 「_」 以外的特殊字元。
    檔案上傳 ConsoleApp.zip .zip檔案,其中包含可執行檔或腳本檔,以及執行程式或腳本所需的任何支援檔案。 支援的可執行檔或指令碼檔案類型會列在支援的檔案類型一節。
    型別 連續 WebJob 類型在本文稍早已有提及。
    調整 多重實例 僅適用於連續 WebJob。 決定程式或指令碼是在所有執行個體上執行,或是只在一個執行個體上執行。 在多個執行個體上執行的選項不適用於免費或共用定價層
  4. 新的 WebJob 會出現在 [WebJob] 分頁。 如果您看到指出已新增 WebJob 的訊息,但卻看不到 WebJob,請選取 [重新整理]。

  5. 若要停止或重新開機連續的 WebJob,請以滑鼠右鍵按一下清單中的 WebJob,然後選取 [停止 ] 或 [ 執行 ] 按鈕,然後確認您的選取專案。

    顯示如何在Azure 入口網站中停止連續 WebJob 的螢幕擷取畫面。

建立手動觸發的 WebJob

  1. Azure 入口網站中,移至 App Service Web 應用程式、API 應用程式或行動裝置應用程式的 [App Service] 分頁。

  2. 從左窗格中,選取 [WebJobs],然後選取 [ 新增]。

    顯示如何在入口網站中App Service應用程式中新增 WebJob 的螢幕擷取畫面, (手動觸發 WebJob) 。

  3. 填入資料表中指定的 [新增 WebJob 設定],然後選取 [ 建立 Webjob]。

    顯示如何為App Service應用程式設定手動觸發 WebJob 的螢幕擷取畫面。

    設定 範例值 描述
    名稱 myTriggeredWebJob App Service 應用程式中唯一的名稱。 必須以字母或數位開頭,且不得包含 「-」 和 「_」 以外的特殊字元。
    檔案上傳 ConsoleApp1.zip .zip檔案,其中包含可執行檔或腳本檔,以及執行程式或腳本所需的任何支援檔案。 支援的可執行檔或指令碼檔案類型會列在支援的檔案類型一節。
    型別 觸發 在本文稍早已有描述 WebJob 類型
    觸發程序 手動
  4. 新的 WebJob 會出現在 [WebJob] 分頁。 如果您看到指出已新增 WebJob 的訊息,但卻看不到 WebJob,請選取 [重新整理]。

  5. 若要執行手動觸發的 WebJob,請以滑鼠右鍵按一下清單中的 WebJob,然後選取 [ 執行 ] 按鈕,然後確認您的選取專案。

    顯示如何在Azure 入口網站中執行手動觸發 WebJob 的螢幕擷取畫面。

建立排程 WebJob

也會觸發排程的 Webjob 程序。 您可以安排在您指定的排程上自動發生觸發程式。

  1. Azure 入口網站中,移至 App Service Web 應用程式、API 應用程式或行動裝置應用程式的 [App Service] 分頁。

  2. 從左窗格中,選取 [WebJobs],然後選取 [ 新增]。

    此螢幕擷取畫面顯示如何在入口網站中 (排程的 WebJob) ,在App Service應用程式中新增 WebJob。

  3. 填入資料表中指定的 [新增 WebJob 設定],然後選取 [ 建立 Webjob]。

    顯示如何在App Service應用程式中設定已排程 WebJob 的螢幕擷取畫面。

    設定 範例值 描述
    名稱 myScheduledWebJob App Service 應用程式中唯一的名稱。 必須以字母或數位開頭,且不得包含 「-」 和 「_」 以外的特殊字元。
    檔案上傳 ConsoleApp.zip 包含可執行檔或腳本檔案以及執行程式或腳本所需的任何支援檔案 的.zip 檔案。 支援的可執行檔或指令碼檔案類型會列在支援的檔案類型一節。
    型別 觸發 WebJob 類型在本文稍早已有提及。
    觸發程序 已排程 若要讓排程可靠地運作,請啟用 [永遠開啟] 功能。 [永遠開啟] 僅適用於基本、標準和進階定價層。
    CRON 運算式 0 0/20 * * * * CRON 運算式將於下一節中說明。
  4. 新的 WebJob 會出現在 [WebJob] 分頁。 如果您看到指出已新增 WebJob 的訊息,但卻看不到 WebJob,請選取 [重新整理]。

  5. 排程的 WebJob 是在 CRON 運算式所定義的排程上執行。 若要隨時手動執行,請以滑鼠右鍵按一下清單中的 WebJob,然後選取 [ 執行 ] 按鈕,然後確認您的選取專案。

    顯示如何在Azure 入口網站中執行手動排程 WebJob 的螢幕擷取畫面。

NCRONTAB 運算式

您可以在入口網站中輸入 NCRONTAB 運算式,或在 WebJob .zip 檔案的根目錄中加入 settings.job 檔案,如下列範例所示:

{
    "schedule": "0 */15 * * * *"
}

若要深入了解,請參閱排程觸發的 WebJob

注意

用來執行 CRON 運算式的預設時區是國際標準時間 (UTC)。 若要讓 CRON 運算式以另一個時區為基礎,請為名為 WEBSITE_TIME_ZONE 的函式應用程式建立應用程式設定。 若要深入了解,請參閱 NCRONTAB 時區

管理 WebJobs

您可以在 Azure 入口網站中管理網站執行的個別 WebJobs 執行狀態。 只要移至 [設定 > WebJobs],選擇該 WebJob,您就可以啟動和停止 WebJob。 您也可以檢視和修改執行 Webhook 的密碼,該 Webhook 執行 WebJob。

您也可以新增名為 WEBJOBS_STOPPED 的應用程式設定,其值為 1,以停止您網站上執行的所有 WebJobs。 您可以使用這個方法來防止衝突的 WebJobs 在預備和生產位置中執行。 同樣地,您可以針對 WEBJOBS_DISABLE_SCHEDULE 設定使用 1 的值,以停用網站或預備位置中觸發的 WebJobs。 針對位置,請記得啟用 [部署位置設定] 選項,讓設定本身不會遭到交換。

檢視工作歷程記錄

  1. 針對您想要查看的 WebJob,選取 [ 記錄]。

    顯示如何存取 WebJob 記錄的螢幕擷取畫面。

  2. 在 [WebJob 詳細資料] 分頁上,選取時間以查看一個執行的詳細資料。

    顯示如何選擇 WebJob 執行的螢幕擷取畫面,以查看其詳細記錄。

  3. [WebJob 執行詳細資料 ] 頁面中,您可以選取 [下載 ] 以取得記錄的文字檔,或選取頁面頂端的 WebJobs 階層連結,以查看不同 WebJob 的記錄。

WebJob 狀態

以下是常見的 WebJob 狀態清單:

  • 初始 化 應用程式剛啟動,而 WebJob 正在完成其初始化程式。
  • 開始 WebJob 正在啟動。
  • 運行 WebJob 正在執行。
  • PendingRestart連續的 WebJob 會在 2 分鐘內結束,因為因為任何原因而啟動,App Service等候 60 秒,再重新開機 WebJob。 如果連續 WebJob 在兩分鐘標記之後結束,App Service不會等待 60 秒,並立即重新開機 WebJob。
  • 停止WebJob 已停止 (通常是來自Azure 入口網站) ,目前未執行,而且在您手動重新開機 WebJob 之前不會執行,即使是連續或排程的 WebJob 也一樣。
  • 中止 這可能會因為許多原因而發生,例如長時間執行的 WebJob 到達逾時標記時。

後續步驟

Azure WebJobs SDK 可以搭配 WebJobs 使用,以簡化許多程式設計工作。 如需詳細資訊,請參閱 什麼是 WebJobs SDK