为什么我的 Time trigger webjob 保持 运行?

Why does my Time trigger webjob keep running?

我有一个 Web 作业,我希望它被时间触发:

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();

    }

我的发布-setting.json:

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

这是它在 Azure 门户上的样子:

我的问题是作业 运行s,我有 hello world,但作业一直处于 运行 状态并且出现超时错误消息:

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

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

编辑:

我测试了Rob Reagan的回答,对错误有帮助,谢谢! 在我的同一项服务中,我还有另一项时间触发的工作(在核心中完成,而我的不是)。

您可以看到 Webjob.Missions 是 'triggered',上次的状态更新是 运行。你也可以看到上面的时间表。 我想要我的 'OrdersArchiving' 也一样。 我怎样才能做到这一点? 谢谢!

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

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

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

编辑 Tom 询问如何按计划为触发的 Web 作业调用方法。有两种选择:

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

  2. 使用 Azure 计划程序通过 HTTP 调用方法。 Azure 计划程序是一个单独的 Azure 服务,你可以预配。它有一个免费套餐,可能足以满足您的使用需求。请参阅 David Ebbo 关于此 here 的 post。