2015-02-27 3 views
9

Ho un WebJob Azure che non riesce dopo soli 20 minuti di corsa con il seguente output di registro:WebJob corsa riuscita a causa di: System.Threading.ThreadAbortException: Thread annullato

[02/27/2015 00:30:11 > 3e9b72: SYS INFO] Status changed to Initializing 
[02/27/2015 00:30:21 > 3e9b72: SYS INFO] Run script 'Namespace.Class.DataProcessor.exe' with script host - 'WindowsScriptHost' 
[02/27/2015 00:30:21 > 3e9b72: SYS INFO] Status changed to Running 
[02/27/2015 00:30:23 > 3e9b72: INFO] Found the following functions: 
[02/27/2015 00:30:23 > 3e9b72: INFO] Namespace.Class.DataProcessor.Functions.ManualTrigger 
[02/27/2015 00:30:23 > 3e9b72: INFO] Executing: 'Functions.ManualTrigger' because This was function was programmatically called via the host APIs. 
[02/27/2015 00:51:35 > 3e9b72: ERR ] Thread was being aborted. 
[02/27/2015 00:51:35 > 3e9b72: SYS INFO] WebJob process was aborted 
[02/27/2015 00:51:35 > 3e9b72: SYS INFO] Status changed to Stopped 
[02/27/2015 00:51:35 > 3e9b72: SYS INFO] Status changed to Failed 
[02/27/2015 00:51:35 > 3e9b72: 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) 
    at Kudu.Core.Jobs.TriggeredJobRunner.<>c__DisplayClass2.<StartJobRun>b__0(Object _) 

E 'in programma per iniziare una volta al giorno quando il sistema è silenzioso e dopo 20 minuti fallisce con quell'errore. Questo errore si verifica solo quando il lavoro viene attivato automaticamente dallo scheduler. Se attivato manualmente dal pannello di Azure WebJob sotto il sito, non vi sono errori nemmeno se viene eseguito per molte ore.

L'applicazione lavoro genera un '.' ogni pochi passi per impedire a Azure di pensare che sia inattivo. Ho anche configurato le seguenti impostazioni sul sito web in cui viene eseguito il lavoro che gli impedisce di timeout se ci vuole un po 'per rispondere o uscita qualcosa al registro:

WEBJOBS_IDLE_TIMEOUT = 14400 SCM_COMMAND_IDLE_TIMEOUT = 14400

L'azione di posti di lavoro è un post richiesta per attivare il lavoro che sospetto sia lo stesso meccanismo che avvia il lavoro manualmente (e non scade).

Come posso evitare che questo non funzioni dopo 20 minuti? Quale impostazione devo modificare/aggiungere per consentire l'esecuzione del lavoro per più di 20 minuti?

+0

Hai mai risolto questo? Ho lo stesso problema. – jrummell

+0

Questo sembra essere correlato - http://stackoverflow.com/questions/27939766/long-running-web-job-being-aborted-by-azure – jrummell

+2

@jrummell La mia soluzione era dividere il lavoro in funzioni più mirate ed eseguire più frequentemente dal momento che è il volume di dati compilati a causarne così a lungo. Ora le funzioni non richiedono più di 10 minuti in modo che non vengano arrestate. Testerà anche la soluzione "Sempre attivo" e quindi forse anche le impostazioni "stopping_wait_time" e vedremo se funziona. – BrutalDev

risposta

-1

Assicurarsi di configurare il sito Web per l'esecuzione con l'impostazione "Sempre attivo" attivata. Ciò richiede un sito Web di livello standard (non disponibile nei siti gratuiti). Da documentation:

Sempre acceso. Per impostazione predefinita, le app Web vengono scaricate se sono inattive per un certo periodo di tempo . Ciò consente al sistema di risparmiare risorse. In modalità Base o Standard, è possibile abilitare Always On per mantenere l'app caricata per tutto il tempo . Se l'app esegue lavori Web continui, è necessario abilitare Sempre On oppure i lavori Web potrebbero non essere eseguiti in modo affidabile.

+0

Il sito in questione ha questa impostazione abilitata. Il modo in cui i lavori Web di Azure vengono attivati ​​proviene da un GET/POST, pertanto riattiverà il sito anche se viene scaricato a differenza di un sistema di pianificazione interno come Hangfire. Avere questa impostazione attiva non impedisce l'errore, sembra correlato alla richiesta di attivazione effettiva che impiega più di 20 minuti per completare senza un chiaro modo di aumentare il timeout. – BrutalDev