<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>docker cron Archives - Pereira, Thiago Santos.</title>
	<atom:link href="https://thiagosantos.com/blog/tag/docker-cron/feed/" rel="self" type="application/rss+xml" />
	<link>https://thiagosantos.com/blog/tag/docker-cron/</link>
	<description>the fun of code.</description>
	<lastBuildDate>Thu, 18 May 2023 03:35:28 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5</generator>
	<item>
		<title>Docker Cron</title>
		<link>https://thiagosantos.com/blog/755/linux/docker-cron/</link>
					<comments>https://thiagosantos.com/blog/755/linux/docker-cron/#respond</comments>
		
		<dc:creator><![CDATA[Pereira, Thiago Santos]]></dc:creator>
		<pubDate>Thu, 18 May 2023 03:15:26 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[container]]></category>
		<category><![CDATA[cron]]></category>
		<category><![CDATA[crontab]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[docker cron]]></category>
		<category><![CDATA[infinite cron]]></category>
		<guid isPermaLink="false">https://thiagosantos.com/blog/?p=755</guid>

					<description><![CDATA[<p>Pod com cron rodando de forma infinita. Sim é possível.</p>
<p>The post <a href="https://thiagosantos.com/blog/755/linux/docker-cron/">Docker Cron</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Uma demanda bem diferente, um container cujo único proposito em vida é ter o cron rodando. Na verdade, um pouco mais que isso, mas não vem ao caso. O ponto é como fazer um container chamador de cron?</p>



<p>Para os apressados a solução é rodar o cron em foreground. Dessa forma ele segura o container e ele não morre de cara.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
ENTRYPOINT &#x5B;&quot;cron&quot;, &quot;-f&quot;]
</pre></div>


<span id="more-755"></span>



<p>Para quem curte uma solução mais completa abaixo está o Dockerfile que usei para resolver essa tarefa. No container deveria haver dois scripts, o primeiro que consultava uma API e retornava uma lista contendo um GUID, data da ultima alteração e a periodicidade que esse GUID deveria ser chamado. O segundo script que era chamado pelo cron passando o GUID respeitando a periodicidade definida.</p>



<p>Assim o primeiro script, deveria acessar uma API a cada 15 minutos, verificar localmente se aqueles GUID recebidos já tinham seus respectivos arquivos cron gerados. A solução foi que para cada GUID recebido criariamos arquivos na pasta do cron.d no formato abaixo.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; highlight: [2]; title: ; notranslate">
#/etc/cron.d/run_primeiro_script
*/15 * * * * root /app/primeiro_script.py
</pre></div>


<p>O segundo script precisa ser chamado dada uma periodicidade e passando um ID como parâmetro.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; highlight: [2]; title: ; notranslate">
#/etc/cron.d/426c3f18-8f87-4ca7-98a9-aaa865ae46d1
*/5 * * * * root /app/segundo_script.py --id 426c3f18-8f87-4ca7-98a9-aaa865ae46d1
</pre></div>


<p>O Dockerfile ficou assim. </p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; highlight: [5]; title: ; notranslate">
FROM ubuntu:23.04 AS base

WORKDIR /app
RUN apt-get update &amp;&amp; apt-get install -y cron python3
RUN echo &quot;*/15 * * * * root python3 /app/primeiro_script.py &gt; /proc/1/fd/1 2&gt;/proc/1/fd/2&quot; &gt; /etc/cron.d/run_primeiro_script

COPY . .

ENTRYPOINT &#x5B;&quot;cron&quot;, &quot;-f&quot;]
</pre></div>


<p>Eu ressalto que como a tarefa do cron é executado em um bash as mensagens da aplicação não saem no bash principal e como consequência não é possível ver essas mensagens no log. Por isso redirecionamos o stdout e o stderr do &#8220;primeiro_script.py&#8221; para o processo de PID 1 que é o comando executado pelo entrypoint.</p>



<p>Essa é uma solução interessante também para manter o log quando o cron executar scripts, programas e aplicações que tenham muita saída no stdout e que normalmente estivessem rodando em foreground seriam enviados para o log do pod.</p>
<p>The post <a href="https://thiagosantos.com/blog/755/linux/docker-cron/">Docker Cron</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thiagosantos.com/blog/755/linux/docker-cron/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
