创建的 WebJobs 无法按照 CRON 的设置来启动

问题现象

通过 settings.job 配置 WebJobs 的启动时间,发现没有在指定的时间启动,比如 "0 0 0 * * *" 并没有在每天的零点启动。

问题分析

在分析该问题之前,需要先了解下 CRON 表达式相关规则。

使用 CRON 表达式创建计划的 WebJobs 可用于在基本、标准或高级模式下运行的 Web 应用,但需要应用上启用 “AlwaysOn”设置。

若要将按需 WebJobs 变成按计划的 WebJobs ,只需在 WebJob.zip 文件的根目录中包含 settings.job 文件。此 JSON 文件应包括 schedule 属性和 CRON 表达式,如下例所示。

CRON 表达式由 6 个字段组成:{second} {minute} {hour} {day} {month} {day of the week}

例如,若要每 15 分钟触发一次 WebJobs,settings.job 需要:

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

其他 CRON 计划示例:

  • 每隔 1 小时(即每当分钟数为 0 时):0 0 * * * *
  • 从上午 9 点到下午 5 点每隔一小时:0 0 9-17 * * *
  • 每天上午 9:30:0 30 9 * * *
  • 各工作日的上午 9:30:0 30 9 * * 1-5

[AZURE.NOTE] 从 Visual Studio 部署 WebJobs 时,请确保将 settings.job 文件属性标记为 “如果较新则复制”。

Azure 平台默认是 UTC 时间,所以如果要基于中国时间配置则需要转换:中国时间 = UTC + 8。

解决方法

在添加 Web 作业时,CRON 表达式中小时位(第三位)需要减 8(等同于加 16),才可以使 Web 作业按时运行。

UTC+8