Spouštění cron jobů v Dockeru

Není od věci mít možnost spouštět pravidelně úlohy, které získávají určitá data nebo něco hlídají a na základě výsledku jsou schopny i poslat informace dál.

Poměrně dlouho jsem používal Zapier, který v bezplatné verzi umožňuje vytvoření až pěti jobů se spouštěním každých 15 minut a za měsíc může dojít ke 100 spuštěním (pro vysvětlenou – job se „spouští“ každých 15 minut, ale pokud nedostane žádný podnět – nový záznam v RSS, na FB… – nezapočítává se do limitu spuštění). Administrace je přehledná, počet podporovaných služeb více než dostatečný a vytváření nových „zapů“ je hračka. Problém je, že pokud chcete trochu povolit otěže, tak nejlevnější plán začíná na $20, což mi pro osobní použití přijde poměrně dost (i když podpora více kroků v zapech je zajímavá nabídka).

Nedávno jsem se dozvěděl o původem českém projektu Integromat, který má konkurovat právě službám jako Zapier. Podpora služeb je srovnatelná a na první pohled se může zdát, že má navrch díky neomezenému počtu scénářů (= zapů u Zapieru) a omezením na 1000 spuštění za měsíc. Zásadní problém však nastává, že do limitu se započítává každé spuštění, ne pouze to, které něco skutečně provede a tak pokud nějaký scénář spouštíte každých 15 minut, vyplítváte si 96 spuštění během dne a limit tedy vydrží cca 10 dní (a to za předpokladu, že máte pouze jeden). Ani toto se tedy neukázalo jako ideální řešení…

Nakonec jsem si řekl, že když už mám ten server pro Docker a programuji v Pythonu, proč si něco takového neudělat sám se spouštěním podle mých představ a bez limitů. A jako u všech věcí, co si takhle dělám „pro radost“, je i tato dostupná jako open source a blíže si teď ukážeme, jak funguje…

První věcí je samozřejmě Dockerfile (aktuální verze bude vždy na Githubu):

Celý container vychází z toho pro Python 3.5.2 což napovídá, v jakém jazyce a verzi se budou roboti (= zapy / scénáře / cron joby / …) psát. Do výsledku je nutné pouze doinstalovat cron a pip kvůli instalaci závislostí. Poté do containeru také přidáme script, který se bude starat o aktivaci crontabu, nainstalování závislostí a zobrazování logů…

Samotná funkčnost při spuštění containeru z image pavelsterba/python-robots je taková, že je potřeba mountnout root s roboty do složky „/robots“ a pokud je to potřeba, přidat i validní „requirements.txt“ a „crontab„. Container už si sám pohlídá, aby cron běžel a závislosti byly nainstalovány. Veškeré logování je doporučeno provádět do souboru „/var/log/robots.log„, který je vypisován na stdout a je tak dostupný před „docker logs„.

Podrobnější informace a návod ke spuštění nalezte na Docker Hubu.

Mohlo by se vám líbit...

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *