在 Azure 应用服务中使用 WebJobs 运行后台任务
通过使用 Azure 门户上传可执行文件或脚本来部署 WebJobs。 可以在 Azure 应用服务中运行后台任务。
如果不使用 Azure 应用服务,而是使用 Visual Studio 来开发和部署 WebJobs,请参阅使用 Visual Studio 部署 WebJobs。
概述
WebJobs 是 Azure 应用服务的一项功能,它允许你在与 Web 应用、API 应用或移动应用相同的实例中运行程序或脚本。 使用 WebJobs 无额外成本。
可以结合使用 Azure WebJobs SDK 和 WebJobs 来简化许多编程任务。 Linux 上的应用服务尚不支持 WebJobs。 有关详细信息,请参阅什么是 WebJobs SDK。
Web 作业类型
下表描述了连续和触发 Web 作业之间的差别。
连续 | 触发 |
---|---|
创建 Web 作业后立即启动。 若要防止作业终止,程序或脚本通常在无限循环中执行其工作。 如果作业确实终止,可将其重启。 通常与 WebJobs SDK 结合使用。 | 仅当手动触发或按计划触发时启动。 |
在运行 Web 应用的所有实例上运行。 可以选择性地将 Web 作业限制为单个实例。 | 在 Azure 选择用于负载均衡的单个实例上运行。 |
支持远程调试。 | 不支持远程调试。 |
代码部署在 \site\wwwroot\app_data\Jobs\Continuous 下。 |
代码部署在 \site\wwwroot\app_data\Jobs\Triggered 下。 |
注意
Web 应用可在进入非活动状态 20 分钟后超时,只有向实际 Web 应用发出请求才会重置计时器。 在 Azure 门户中查看应用的配置或向高级工具站点 (https://<app_name>.scm.chinacloudsites.cn
) 发出请求不会重置计时器。 如果将托管作业的 Web 应用设置为持续运行、按计划运行或使用事件驱动的触发器,请在 Web 应用的 Azure“配置”页上启用“始终可用”设置 。 “始终可用”设置有助于确保这些类型的 Web 作业可靠运行。 此功能仅在基本、标准和高级定价层中提供。
支持的脚本或程序文件类型
支持以下文件类型:
- .cmd、.bat、.exe(使用 Windows cmd)
- .ps1(使用 PowerShell)
- .sh(使用 Bash)
- .php(使用 PHP)
- .py(使用 Python)
- .js(使用 Node.js)
- .jar(使用 Java)
创建连续 Web 作业
重要
如果为应用程序配置了源代码管理,则 Webjobs 应会部署为源代码管理集成的一部分。 为应用程序配置源代码管理后,无法从 Azure 门户添加 WebJob。
在 Azure 门户中,转到应用服务 Web 应用、API 应用或移动应用的“应用服务”页。
在左窗格中,依次选择“WebJobs”、“添加”。
填写表中指定的“添加 WebJob”设置,然后选择“创建 Webjob”。
设置 示例值 说明 Name myContinuousWebJob 在应用服务应用中唯一的名称。 必须以字母或数字开头,且不能包含除 "-" 和 "_" 以外的特殊字符。 文件上传 ConsoleApp.zip .zip文件,其中包含可执行文件或脚本文件,以及运行程序或脚本所需的所有支持文件。 支持的文件类型部分中列出了支持的可执行文件或脚本文件类型。 类型 连续 本文前面介绍了 Web 作业类型。 缩放 多实例 仅适用于连续 Web 作业。 确定程序或脚本是在所有实例还是只在一个实例上运行。 指定要在多个实例上运行的选项不适用于免费或共享定价层。 新的 Web 作业随即显示在“Web 作业”页上。 如果有消息指出已添加 WebJob 但你未看到该 WebJob,请选择“刷新”。
要停止或重启连续 WebJob,请在列表中右击该 WebJob,并选择“停止”或“运行”按钮,然后确认选择。
创建手动触发的 Web 作业
在 Azure 门户中,转到应用服务 Web 应用、API 应用或移动应用的“应用服务”页。
在左窗格中,依次选择“WebJobs”、“添加”。
填写表中指定的“添加 WebJob”设置,然后选择“创建 Webjob”。
设置 示例值 说明 Name myTriggeredWebJob 在应用服务应用中唯一的名称。 必须以字母或数字开头,且不能包含除 "-" 和 "_" 以外的特殊字符。 文件上传 ConsoleApp1.zip .zip文件,其中包含可执行文件或脚本文件,以及运行程序或脚本所需的所有支持文件。 支持的文件类型部分中列出了支持的可执行文件或脚本文件类型。 类型 触发 本文前面介绍了 WebJob 类型。 触发器 手动 新的 Web 作业随即显示在“Web 作业”页上。 如果有消息指出已添加 WebJob 但你未看到该 WebJob,请选择“刷新”。
要运行手动触发的 WebJob,请右击列表中的 WebJob 并选择“运行”按钮,然后确认选择。
创建计划的 Web 作业
还会触发计划的 WebJob。 可将触发器安排为按照你指定的计划自动运行。
在 Azure 门户中,转到应用服务 Web 应用、API 应用或移动应用的“应用服务”页。
在左窗格中,依次选择“WebJobs”、“添加”。
填写表中指定的“添加 WebJob”设置,然后选择“创建 Webjob”。
设置 示例值 说明 Name myScheduledWebJob 在应用服务应用中唯一的名称。 必须以字母或数字开头,且不能包含除 "-" 和 "_" 以外的特殊字符。 文件上传 ConsoleApp.zip .zip文件,其中包含可执行文件或脚本文件,以及运行程序或脚本所需的所有支持文件。 支持的文件类型部分中列出了支持的可执行文件或脚本文件类型。 类型 触发 本文前面介绍了 Web 作业类型。 触发器 计划 要使计划可靠运行,请启用 Always On 功能。 Always On 仅在基本、标准和高级定价层中提供。 CRON 表达式 0 0/20 * * * * 以下部分介绍了 CRON 表达式。 新的 Web 作业随即显示在“Web 作业”页上。 如果有消息指出已添加 WebJob 但你未看到该 WebJob,请选择“刷新”。
计划的 WebJob 按 CRON 表达式定义的计划运行。 要随时运行手动运行它,请右击列表中的 WebJob 并选择“运行”按钮,然后确认选择。
NCRONTAB 表达式
可以在门户中输入 NCRONTAB 表达式,或者在 Web 作业 .zip 文件的根目录中包含一个 settings.job
文件,如以下示例中所示:
{
"schedule": "0 */15 * * * *"
}
若要了解详细信息,请参阅计划触发的 Web 作业。
注意
运行 CRON 表达式使用的默认时区为协调世界时 (UTC)。 若要让 CRON 表达式基于其他时区运行,请为函数应用创建一个名为 WEBSITE_TIME_ZONE 的应用设置。 若要了解详细信息,请参阅 NCRONTAB 时区。
管理 WebJob
可以在 Azure 门户中管理你站点中运行的各个 WebJob 的运行状态。 只需转到“设置”>“WebJobs”,选择 WebJob,然后可以启动和停止该 WebJob 。 还可以查看和修改运行 WebJob 的 Webhook 的密码。
还可以添加名为 WEBJOBS_STOPPED
、值为 1
的应用程序设置,以停止站点上运行的所有 WebJob。 可以使用此方法防止有冲突的 WebJob 在过渡槽和生产槽中运行。 同样,可为 WEBJOBS_DISABLE_SCHEDULE
设置使用 1
值,以便在站点或过渡槽中禁用已触发的 WebJob。 对于槽,请记得启用“部署槽设置”选项,使该设置本身不会交换。
查看作业历史记录
对于要查看的 WebJob,请选择“日志”。
在“Web 作业详细信息”页中,选择一个时间以查看一个运行轮次的详细信息。
在“WebJob 运行详细信息”页面,可以选择“下载”以获取日志的文本文件,或者选择页面顶部的“WebJobs”痕迹导航链接以查看不同 WebJob 的日志。
WebJob 状态
下面是常见 WebJob 状态的列表:
- 正在初始化 应用刚刚启动,WebJob 正在经历初始化过程。
- 正在启动 WebJob 正在启动。
- 正在运行 WebJob 正在运行。
- PendingRestart 在任何情况下,连续 WebJob 都在启动不到两分钟后就退出,应用服务等待 60 秒,然后重启 WebJob。 如果连续 WebJob 在两分钟标记后退出,应用服务不会等待 60 秒并立即重启 WebJob。
- 已停止 WebJob 已停止(通常从 Azure 门户)且当前未运行,在再次手动启动之前,它都不会运行,即使是连续或计划的 WebJob 也是如此。
- 已中止 出现这种情况的原因有很多,例如,当长时间运行的 WebJob 达到超时标记时。
后续步骤
可以结合 WebJobs 使用 Azure WebJobs SDK 来简化许多编程任务。 有关详细信息,请参阅什么是 WebJobs SDK。