Problém
Máme v Azure nasazeno několik Azure Website spolu s naplanovanými (scheduled) web job. Řešíme situaci, kdy se webjob spustí dvakrát, zhruba v rozmezí jedné minuty. (V našem konkrétním případě posíláme notifikační emaily a tyto nám přijdou dva.)
Analýzou historie zjišťuji, že scheduler se webjob pokusil úlohu spustit dokonce třikrát.
Přičemž log jednotlivých pokusů vypadá takto:
- Http Action – Request to host ‚(…).scm.azurewebsites.net‘ failed: The timeout (30 seconds) was reached.
- Http Action – Response from host ‚(…).scm.azurewebsites.net‘: ‚Conflict‘ Response
…
Body: Cannot start a new run since job is already running. - Http Action – Response from host ‚(…).scm.azurewebsites.net‘: ‚Accepted‘ Response
Položky logu interpretuji takto:
- Bod 1 úspěšně spustit webjob, ale nebyl schopen v intervalu 30 sekund toto zjistit.
- Bod 2 se pokusil spustit webjob, ale ten již běžel, takže byl oznámen konflikt.
- Bod 3 se opět pokusil spustit webjob, ten již doběhl, takže byl webjob úspěšně (ve skutečnosti podruhé) spuštěn.
Řešení
Po přečtení
- (zoufalé) diskuse,
- de facto nesouvisející zprávy aspoň trochu popisující nastavení Always On
- a minimalistické dokumentace
se pokouším interpretovat (snad) klíčovou větu „If your site runs continuous web jobs, you should enable Always On, or the web jobs may not run reliably“ tak, že Always On zapínám i pro náš scheduled Web Job. Pomáhá to.
Volba Always On se nastavuje v Azure portálu, v nastavení Azure Website, se přepínačem Always On na záložce Configure.