如何在回收/重新启动WebApp后使用TimeTrigger自动启动Azure WebJob

时间:2016-11-10 13:24:09

标签: c# azure azure-web-sites azure-webjobs azure-webjobssdk

我在Azure WebApp中使用WebJob。该作业执行一个方法:

public static void ProcessQueue(
            [TimerTrigger("00:02:00")] TimerInfo timerInfo,
            [Queue("queue")] CloudQueue queue,
            [Table("processing")] CloudTable processingTable,
            TextWriter log)
{
    // do sth...
}

TimeTrigger选项来自Microsoft.Azure.WebJobs.Extensions

我将WebApp设置为在"always on" mode中运行。

但是如果我正在重启或更改WebApp可能的应用程序设置,那么在内部进行回收?我认为。

因为在此之后我收到以下错误:

  

[11/10/2016 08:22:24> 36d12e:SYS ERR] WebJob运行失败,原因是:System.Threading.ThreadAbortException:正在中止线程。      at Kudu.Core.Jobs.BaseJobRunner.RunJobInstance(JobBase job,IJobLogger logger,String runId,String trigger,ITracer tracer,Int32 port)      在Kudu.Core.Jobs.TriggeredJobRunner。<> c__DisplayClass10_1.b__0(对象_)

所以我试着在WebJob上设置一个时间表,我也尝试在目录中粘贴一个CRON时间表,但在重置/回收后没有任何帮助我将工作“运行”。

更新1
我的exe(Main()

的内容
JobHostConfiguration config = new JobHostConfiguration();
config.Tracing.ConsoleLevel = TraceLevel.Verbose;
config.Queues.MaxDequeueCount = 10;
config.UseCore();
config.UseTimers();
var host = new JobHost(config);
host.RunAndBlock();

更新2
如果我在Azure门户中手动连续部署,一切都按预期运行(感谢mathewc)。但这是一个手动步骤;)。我在DevOps场景中,所有内容都将由 Visual Studio Team Services 构建,创建和部署,并且您无法设置任何选项来将作业部署为连续

1 个答案:

答案 0 :(得分:1)

根据您显示的调用堆栈,您可能错误地将作业部署为触发而不是连续 WebJob?使用WebJobs SDK时,您应该按照here所述的方式连续部署WebJobs。

一旦以连续模式运行,您是正确的,如果您更改应用程序设置或以其他方式重新启动,您的WebJobs也将重新启动。但是,TimerTrigger的内部调度程序将确保作业在重新启动时按计划继续运行。