我有一个希望被时间触发的网络作业:
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");
}
}
我的程序.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();
}
我的发布设置.json:
{
"$schema": "http://schemastore.org/schemas/json/webjob-publish-settings.json",
"webJobName": "OrdersArchiving",
"runMode": "OnDemand"
}
我的问题是作业运行,我有 hello world,但作业保持运行状态并且它得到一个超时错误消息:
[02/05/2018 15:34:05 > f0ea5f: ERR ] 命令 'cmd /c ""Ores.Contr ...' 由于 121 秒内没有输出或 CPU 活动而中止。如果需要,您可以增加 SCM_COMMAND_IDLE_TIMEOUT 应用程序设置(或 WEBJOBS_IDLE_TIMEOUT,如果这是一个 WebJob)。
我能做些什么来解决这个问题?我有一个疯狂的猜测 RunAndBlock 可能是一个问题..但我没有看到解决方案..谢谢!
编辑:
我已经测试了 Rob Reagan 的答案,它确实有助于解决错误,谢谢!在我的同一项服务中,我还有另一项时间触发的工作(在核心中完成,而我的不是)。
您可以看到 Webjob.Missions 已“触发”,并且上次运行时的状态更新。你也可以看到上面的时间表。我想为我的“OrdersArchiving”提供相同的功能。我怎样才能做到这一点?谢谢!