为什么我的Time触发webjob继续运行?

时间:2018-02-05 15:43:48

标签: azure azure-webjobs-triggered

我有一个我希望被时间触发的Webjob:

public class ArchiveFunctions
{
    private readonly IOrderArchiver _orderArchiver;

    public ArchiveFunctions(IOrderArchiver orderArchiver)
    {
        _orderArchiver = orderArchiver;
    }

    public async Task Archive([TimerTrigger("0 */5 * * * *")] TimerInfo timer, TextWriter log)
    {
            log.WriteLine("Hello world");
    }
}

我的program.cs:

public static void Main()
    {
        var config = new JobHostConfiguration
        {
            JobActivator = new AutofacJobActivator(RegisterComponents())
        };

        config.UseTimers();

        var host = new JobHost(config);

        // The following code ensures that the WebJob will be running continuously
        host.RunAndBlock();

    }

my publish-setting.json:

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

以下是天蓝门户网站上的内容: enter image description here

我的问题是作业运行,我有hello世界,但是作业保持运行状态并且它会出现超时错误消息:

[02/05/2018 15:34:05> f0ea5f:ERR]命令'cmd / c“”Ores.Contr ...'由于121秒没有输出或CPU活动而中止。如果需要,您可以增加SCM_COMMAND_IDLE_TIMEOUT应用程序设置(如果这是WebJob,则增加WEBJOBS_IDLE_TIMEOUT)。

我该怎么做才能解决这个问题? 我有一个疯狂的猜测RunAndBlock可能是一个问题..但我没有看到解决方案.. 谢谢!

修改

我已经测试了Rob Reagan的答案,它确实有助于解决错误,谢谢! 在我的同一项服务上,我有另外一次触发工作(在核心完成,而我的不是)。 enter image description here

您可以看到Webjob.Missions已“触发”,并且上次运行时状态更新。你也可以看到它的日程安排。 我想对我的'OrdersArchiving'也有同样的看法。 我怎样才能做到这一点? 谢谢!

1 个答案:

答案 0 :(得分:3)

将您的运行模式更改为连续且未触发。 TimerTrigger将处理执行您放置它的方法。

另外,请确保您没有使用免费套餐来托管您的WebJob。在20分钟不活动后,应用程序将暂停,并等待新的HTTP请求将其唤醒。

此外,请确保您已在Web App设置上启用Always On,以防止同一事件发生在更高级别的服务层Web应用程序中。

修改 Tom询问如何按触发WebJob的计划调用方法。有两种选择:

  1. 将作业设置为已触发,并使用settings.json文件设置计划。您可以阅读here

  2. 使用Azure Scheduler通过HTTP调用方法。 Azure计划程序是您可以配置的单独Azure服务。它有一个免费等级,可能足以供您使用。请在此here上查看David Ebbo的帖子。