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

注意

適用於 Windows 容器Linux 程式代碼Linux 容器 的 WebJobs 處於預覽狀態。 適用於 Windows 程式代碼的 WebJobs 已正式推出,且無法預覽。

使用 Azure 入口網站 來部署 WebJobs,以上傳可執行檔或腳本。 您可以在 Azure App 服務 中執行背景工作。

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

概觀

WebJobs 是一項 Azure App 服務 功能,可讓您在與 Web 應用程式相同的實例中執行程式或腳本。 使用 WebJobs 不需要額外費用。

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

Azure Functions 提供另一種執行程式和腳本的方式。 如需 WebJobs 與 Functions 之間的比較,請參閱 在 Flow、Logic Apps、Functions 和 WebJobs 之間選擇。

WebJob 類型

文稿或程式支援的檔案類型

支援以下檔案:
.cmd、.bat.exe(使用 Windows Cmd)
.ps1 (使用 PowerShell)
.sh (使用 Bash)
.php (使用 PHP)
.py (使用 Python)
.js(使用Node.js)
.jar (使用 Java)

執行這些檔案類型的必要運行時間已經安裝在 Web 應用程式實例上。

連續與觸發的 WebJobs

下表描述連續觸發 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 得以可靠地執行。 這項功能僅適用於基本、標準和進階定價層

建立連續的 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 類型
    縮放比例 多重實例 僅適用於連續 WebJobs。 判斷程式或腳本是否在所有實例或一個實例上執行。 在多個實例上執行的選項不適用於免費或共用 定價層
  4. 新的 WebJob 會出現在 WebJobs 頁面上。 如果您看到顯示 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 會出現在 WebJobs 頁面上。 如果您看到顯示 WebJob 已新增的訊息,但您看不到它,請選取 [ 重新整理]。

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

    顯示如何在 Azure 入口網站 中執行手動觸發 WebJob 的螢幕快照。

建立排程的 WebJob

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

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

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

    顯示如何在入口網站中 App Service 應用程式中新增 WebJob 的螢幕快照(已排程的 WebJob)。

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

    顯示如何在 App Service 應用程式中設定排程 WebJob 的螢幕快照。

    設定 範例值 描述
    名稱 myScheduledWebJob App Service 應用程式內唯一的名稱。 必須以字母或數字開頭,且不得包含 「-」 和 「_」 以外的特殊字元。
    檔案上傳 ConsoleApp.zip .zip檔案,其中包含可執行檔或腳本檔,以及執行程式或腳本所需的任何支持檔案。 支援的可執行檔或文稿檔類型列在 支援的檔案類型 一節中。
    類型 觸發 本文稍早會說明 WebJob 類型
    觸發程序 已排程 若要讓排程可靠地運作,請啟用 AlwaysOn 功能。 AlwaysOn 僅適用於基本、標準和 進階版 定價層。
    CRON 運算式 0 0/20 * * * * 下一節將說明CRON表達式
  4. 新的 WebJob 會出現在 WebJobs 頁面上。 如果您看到顯示 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。 您也可以檢視和修改執行 WebJob 之 Webhook 的密碼。

您也可以新增名為 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 會因為任何原因而結束不到兩分鐘,而 App Service 會在重新啟動 WebJob 之前等候 60 秒。 如果連續的 WebJob 在兩分鐘標記之後結束,App Service 不會等候 60 秒,並立即重新啟動 WebJob。
  • 已停止 WebJob(通常是從 Azure 入口網站 開始),目前未執行,而且在您手動啟動 WebJob 之前不會執行,即使是連續或已排程的 WebJob 也一樣。
  • 中止 的原因有很多,例如長時間執行的 WebJob 到達逾時標記時。

下一步

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