为什么我的 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 作业调用方法。有两种选择:
我有一个 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 作业调用方法。有两种选择: