2016-11-10 90 views
0

我在Azure WebApp中使用WebJob。該作業執行的方法:如何在回收/重新啓動後使用TimeTrigger自動啓動Azure WebJob WebApp

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 run failed due to: System.Threading.ThreadAbortException: Thread was being aborted. at Kudu.Core.Jobs.BaseJobRunner.RunJobInstance(JobBase job, IJobLogger logger, String runId, String trigger, ITracer tracer, Int32 port) at Kudu.Core.Jobs.TriggeredJobRunner.<>c__DisplayClass10_1.b__0(Object _)

於是,我就設定一個時間表上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團隊服務構建,創建和部署,您無法設置任何選項將作業部署爲連續作業

+0

你還可以分享你的exe啓動代碼,所以我可以看到你是否正確啓動WebJobs SDK JobHost? – mathewc

+0

@mathewc:已添加爲Update1 – Martin

回答

1

基於你已經證明調用堆棧上,它看起來像你可能沒有正確地部署自己的工作爲觸發而不是連續 WebJob?使用WebJobs SDK時,應按照here所述的方式將WebJobs部署爲連續的。

一旦以連續模式運行,您是正確的,如果您更改應用程序設置或以其他方式導致重新啓動,WebJobs也將重新啓動。然而,TimerTrigger的內部調度程序將確保作業在其恢復時按計劃繼續運行。

+0

謝謝。更新我的問題。此手動步驟正在運行... – Martin

+1

請參閱[本頁](https://blogs.msdn.microsoft.com/tfssetup/2016/05/18/deploying-and-schedule-azure-webjobs-from-vsts-to -azure-web-app-with-bonus-cron-scheduling /)瞭解有關設置自動VSTS部署的詳細信息。該頁面部署了一個OnDemand,但如果您選擇連續,您將獲得所需的內容。 – mathewc

+0

聽起來像個好主意。之前找到了這個頁面,但在Visual Studio發佈中本地配置調度程序並不奇怪,然後這個配置將用於通過vsts進行部署? – Martin

相關問題