使用 WebJobs 运行后台任务

本文介绍如何使用 Azure 门户 部署 WebJobs 来上传可执行文件或脚本。 WebJobs 是 Azure 应用服务的 一项功能,可用于在与 Web 应用相同的实例中运行程序或脚本。 所有应用服务计划都支持 WebJobs。 使用 WebJobs 无额外成本。

概述

WebJobs 是 Azure 应用服务的一项功能,它支持在与 Web 应用相同的实例中运行程序或脚本。 所有应用服务计划都支持 WebJobs。 使用 WebJobs 无额外成本。

如果使用 Visual Studio 而不是 Azure 应用服务来开发和部署 WebJobs,请参阅使用 Visual Studio 开发和部署 WebJobs

Azure Functions 提供了运行程序和脚本的另一种方式。 有关 WebJobs 和 Functions 之间的比较,请参阅 在 Azure 中选择正确的集成和自动化服务

Web 作业类型

支持的脚本或程序文件类型

支持以下文件类型:

  • 使用 Windows cmd: .cmd.bat.exe
  • 使用 PowerShell:.ps1
  • 使用 Bash:.sh
  • 使用 Node.js:.js
  • 使用 Java:.jar

运行这些文件类型所需的运行时已安装在 Web 应用实例上。

连续 WebJobs 与触发 WebJobs

下表描述了连续 WebJobs 和触发 WebJobs 之间的差异

连续 触发
创建 Web 作业后立即启动。 若要防止作业终止,程序或脚本通常在无限循环中执行其工作。 如果作业确实终止,可将其重启。 通常与 WebJobs SDK 结合使用。 仅当手动触发或按计划触发时启动。
在运行 Web 应用的所有实例上运行。 可以选择性地将 Web 作业限制为单个实例。 在 Azure 选择用于负载均衡的单个实例上运行。
支持远程调试。 不支持远程调试。
代码部署在 \site\wwwroot\app_data\Jobs\Continuous 下。 代码部署在 \site\wwwroot\app_data\Jobs\Triggered 下。

注意

Web 应用可在进入非活动状态 20 分钟后超时,只有向实际 Web 应用发出请求才会重置计时器。 在 Azure 门户中查看应用的配置或向高级工具站点发出请求不会重置计时器。 如果将托管作业的 Web 应用设置为持续运行、按计划运行或使用事件驱动的触发器,请在 Web 应用的 Azure“配置”窗格中启用“始终可用”设置。 “Always on”设置有助于确保这些类型的 WebJobs 可靠运行。 此功能仅在基本、标准和高级定价层中提供。

创建连续 Web 作业

重要

如果为应用程序配置了源代码管理,则 Webjobs 应会部署为源代码管理集成的一部分。 为应用程序配置源代码管理后,无法从 Azure 门户添加 WebJob。

  1. Azure 门户中,转到应用服务 Web 应用、API 应用或移动应用的“应用服务”页。

  2. 在左窗格中的 “设置” 下,选择 “Web 作业”,然后选择“ 添加”。

    此屏幕截图展示了如何在门户中的应用服务应用中添加 WebJob。

  3. 填写表中指定的“添加 WebJob”设置,然后选择“创建 Webjob”。

    屏幕截图显示了如何为应用服务应用配置多实例连续 WebJob。

    设置 示例值 说明
    名称 myContinuousWebJob 唯一的 WebJob 名称。 必须以字母或数字开头,并且不能包含除 "-""_"以外的特殊字符。
    文件上传 ConsoleApp.zip .zip文件,其中包含可执行文件或脚本文件,以及运行程序或脚本所需的所有支持文件。 支持的文件类型部分中列出了支持的可执行文件或脚本文件类型。
    类型 连续 本文前面介绍了 Web 作业类型
    缩放 多实例 仅适用于连续 Web 作业。 确定程序或脚本是在所有实例上运行,还是在一个实例上运行。 指定要在多个实例上运行的选项不适用于免费或共享定价层
  4. 新的 Web 作业随即显示在“Web 作业”页上。 如果有消息指出已添加 WebJob 但你未看到该 WebJob,请选择“刷新”。

  5. 要停止或重启连续 WebJob,请在列表中右击该 WebJob,并选择“停止”或“运行”按钮,然后确认选择。

    显示如何在 Azure 门户中停止连续 Web 作业的屏幕截图。

创建手动触发的 Web 作业

  1. Azure 门户中,转到应用服务 Web 应用、API 应用或移动应用的“应用服务”页。

  2. 在左窗格中的 “设置” 下,选择 “Web 作业”,然后选择“ 添加”。

    屏幕截图显示了如何在门户的应用服务应用中添加 WebJob(手动触发的 WebJob)。

  3. 填写表中指定的“添加 WebJob”设置,然后选择“创建 Webjob”。

    屏幕截图显示了如何为应用服务应用配置手动触发的 WebJob。

    设置 示例值 说明
    名称 myTriggeredWebJob 唯一的 WebJob 名称。 必须以字母或数字开头,并且不能包含除 "-""_"以外的特殊字符。
    文件上传 ConsoleApp1.zip .zip文件,其中包含可执行文件或脚本文件,以及运行程序或脚本所需的所有支持文件。 支持的文件类型部分中列出了支持的可执行文件或脚本文件类型。
    类型 触发 本文前面介绍了 WebJob 类型
    触发器 手动
  4. 新的 Web 作业随即显示在“Web 作业”页上。 如果有消息指出已添加 WebJob 但你未看到该 WebJob,请选择“刷新”。

  5. 要运行手动触发的 WebJob,请右击列表中的 WebJob 并选择“运行”按钮,然后确认选择。

    显示如何在 Azure 门户中运行手动触发的 Web 作业的屏幕截图。

创建计划的 Web 作业

还会触发计划的 WebJob。 可将触发器安排为按照你指定的计划自动运行。

  1. Azure 门户中,转到应用服务 Web 应用、API 应用或移动应用的“应用服务”页。

  2. 在左窗格中的 “设置” 下,选择 “Web 作业”,然后选择“ 添加”。

    屏幕截图显示了如何在门户的应用服务应用中添加 WebJob(计划的 WebJob)。

  3. 填写表中指定的“添加 WebJob”设置,然后选择“创建 Webjob”。

    屏幕截图显示了如何在应用服务应用中配置计划的 WebJob。

    设置 示例值 说明
    名称 myScheduledWebJob 唯一的 WebJob 名称。 必须以字母或数字开头,并且不能包含除 "-""_"以外的特殊字符。
    文件上传 ConsoleApp.zip .zip文件,其中包含可执行文件或脚本文件,以及运行程序或脚本所需的所有支持文件。 支持的文件类型部分中列出了支持的可执行文件或脚本文件类型。
    类型 触发 本文前面介绍了 Web 作业类型
    触发器 计划 要使计划可靠运行,请启用 Always On 功能。 Always On 仅在基本、标准和高级定价层中提供。
    CRON 表达式 0 0/20 * * * * 以下部分介绍了 CRON 表达式
  4. 新的 Web 作业随即显示在“Web 作业”页上。 如果有消息指出已添加 WebJob 但你未看到该 WebJob,请选择“刷新”。

  5. 计划的 WebJob 按 CRON 表达式定义的计划运行。 要随时运行手动运行它,请右击列表中的 WebJob 并选择“运行”按钮,然后确认选择。

    显示如何在 Azure 门户中运行手动计划的 Web 作业的屏幕截图。

NCRONTAB 表达式

NCRONTAB 表达式类似于 CRON 表达式,但在开始时包含额外的第六个字段,以秒为单位的时间精度。 可以在门户中输入 NCRONTAB 表达式,也可以在 WebJob .zip 文件的根目录中包含settings.job文件,如以下示例所示:

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

若要了解详细信息,请参阅计划触发的 Web 作业

注意

运行 CRON 表达式使用的默认时区为协调世界时 (UTC)。 若要让 CRON 表达式基于其他时区运行,请为函数应用创建一个名为 WEBSITE_TIME_ZONE 的应用设置。 若要了解详细信息,请参阅 NCRONTAB 时区

管理 WebJob

可以使用 Azure 门户管理站点中运行的各个 WebJobs 的运行状态。 转到“设置”“WebJobs”,选择 WebJob,然后就可以启动和停止该 WebJob>。 还可以查看和修改运行 WebJob 的 Webhook 的密码。

还可以配置名为 WEBJOBS_STOPPED、值为 1应用程序设置,以停止站点上运行的所有 WebJob。 可以使用此方法防止有冲突的 WebJob 在过渡槽和生产槽中运行。 同样,可为 1 设置使用 WEBJOBS_DISABLE_SCHEDULE 值,以便在站点或过渡槽中禁用已触发的 WebJob。 对于槽,请记得启用“部署槽设置”选项,使该设置本身不会交换。

查看作业历史记录

  1. 对于要查看的 WebJob,请选择“日志”。

    显示如何访问 WebJob 日志的屏幕截图。

  2. 在“Web 作业详细信息”页中,选择一个时间以查看一个运行轮次的详细信息。

    显示如何选择 WebJob 运行以查看其详细日志的屏幕截图。

  3. 在“WebJob 运行详细信息”页面,可以选择“下载”以获取日志的文本文件,或者选择页面顶部的“WebJobs”痕迹导航链接以查看不同 WebJob 的日志。

WebJob 状态

下面是常见 WebJob 状态的列表:

  • 初始化:应用已启动,WebJob 将经历其初始化过程。
  • 正在启动:WebJob 正在启动。
  • 正在运行:WebJob 正在运行。
  • PendingRestart:如果连续运行的 WebJob 因任何原因在启动后不到两分钟内退出,应用服务将在重启 WebJob 之前等待 60 秒。 如果连续 WebJob 在两分钟标记后退出,应用服务不会等待 60 秒并立即重启 WebJob。
  • 已停止:WebJob 已停止(通常从 Azure 门户)且当前未运行,在再次手动启动之前,它都不会运行,即使是连续或计划的 WebJob 也是如此。
  • 已中止:出现这种情况的原因有很多,例如,长时间运行的 WebJob 达到超时标记。

后续步骤

教程:使用 WebJobs 运行后台任务