VS2017 Azure WebJob扩展-如何部署TimerTrigger WebJob?

时间:2018-12-13 15:18:32

标签: azure-webjobs azure-webjobssdk

我有一个下面的WebJob项目,试图在其中部署TimerTrigger WebJob函数,但是在Visual Studio 2017中通过“发布为Azure WebJob ...”部署它时,无法使其按计划运行。

Program.cs

class Program
{
    static void Main()
    {
        var config = new JobHostConfiguration();

        if (config.IsDevelopment)
        {
            config.UseDevelopmentSettings();
        }

        config.UseTimers();

        var host = new JobHost(config);
        host.RunAndBlock();
    }
}

Functions.cs

public class Functions
{
        public static async Task ProcessAsync([TimerTrigger("0 */3 * * * *")] TimerInfo timerInfo, TextWriter log)
        {
              ...
        }
}

webjob-publish-settings.json

{
  "$schema": "http://schemastore.org/schemas/json/webjob-publish-settings.json",
  "webJobName": "TestWebJob",
  "runMode": "OnDemand"
}

Settings.job

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

关于此的文档几乎不存在,并且令人困惑为何Azure支持Scheduled CRON TimerTrigger,但在部署时实际上并未将它们包括在内。

这可能吗?

2 个答案:

答案 0 :(得分:1)

如果您手动创建了计划Web作业,我想您可能会发现它将生成一个settings.job来设置schedule。然后,门户中的 SCHEDULE schedule并显示它。而且,如果您使用VS2017部署TimerTrigger Webjob,则因为定义了TimerTrigger函数,它不会生成此文件。

然后我做了一些测试来展示它。首先,我使用TimerTrigger创建一个webjob并部署它,它将显示与使用n/a SCHEDULE 相同的结果。然后,我终止了webjob进程并上传了settings.job,然后刷新(而不是在门户网站中刷新)页面,然后 SCHEDULE 更改为CRON表达式。如果删除该文件,它将恢复原样。 this enter image description here

对于日志,我认为这也是由settings.job引起的,如果您拥有此文件,它将每隔x分钟触发一次该webjob,如果您没有此文件,则将在每隔x分钟触发一次webjob。网络工作。

如果您仍有疑问,请告诉我。

答案 1 :(得分:0)

上面的代码似乎有效。但是,它的运行方式与您熟悉手动运行“计划的” WebJob时所想像的完全不同。

如果要手动运行它们,通常会在最顶层看到时间表,并且每隔x分钟更新一次状态,等等:

WebJob

,您还将看到日志在父级更新,例如:

logs 1

但是,当通过Visual Studio 2017使用上述方法部署它时,您在WebJob的整个生命周期内只能运行一次。结果,您也只会在日志列表中获得一个父日志。

尽管单击此按钮,您将看到每个计划的功能日志的单独日志:

function logs

希望这对正在考虑设置WebJobs的其他人有意义:)