我有一个我希望被时间触发的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"
}
我的问题是作业运行,我有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的答案,它确实有助于解决错误,谢谢! 在我的同一项服务上,我有另外一次触发工作(在核心完成,而我的不是)。您可以看到Webjob.Missions已“触发”,并且上次运行时状态更新。你也可以看到它的日程安排。 我想对我的'OrdersArchiving'也有同样的看法。 我怎样才能做到这一点? 谢谢!
答案 0 :(得分:3)
将您的运行模式更改为连续且未触发。 TimerTrigger将处理执行您放置它的方法。
另外,请确保您没有使用免费套餐来托管您的WebJob。在20分钟不活动后,应用程序将暂停,并等待新的HTTP请求将其唤醒。
此外,请确保您已在Web App设置上启用Always On,以防止同一事件发生在更高级别的服务层Web应用程序中。
修改强> Tom询问如何按触发WebJob的计划调用方法。有两种选择: