<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Automatização on /var/log/janio</title><link>https://devops.sarmento.org/tags/automatiza%C3%A7%C3%A3o/</link><description>Recent content in Automatização on /var/log/janio</description><generator>Hugo</generator><language>pt-BR</language><lastBuildDate>Sun, 17 May 2026 11:23:00 +0000</lastBuildDate><atom:link href="https://devops.sarmento.org/tags/automatiza%C3%A7%C3%A3o/index.xml" rel="self" type="application/rss+xml"/><item><title>Secret management no macOS e no Linux: uma abordagem teórico-prática</title><link>https://devops.sarmento.org/posts/secret-management-macos-linux/</link><pubDate>Sun, 17 May 2026 11:34:00 +0000</pubDate><guid>https://devops.sarmento.org/posts/secret-management-macos-linux/</guid><description>&lt;p&gt;Existe um momento na vida de praticamente todo sysadmin em que ele percebe que espalhou segredos demais pelo ambiente: uma senha em &lt;code&gt;.env&lt;/code&gt; aqui, um token no histórico do shell ali, um webhook esquecido dentro de um &lt;code&gt;docker-compose.yml&lt;/code&gt;, uma API key hardcoded num script “temporário” que continua rodando dois anos depois. Nada disso parece grave isoladamente; o problema é que a infraestrutura quase nunca quebra por uma decisão única e gigantesca. Ela quebra pelo acúmulo de pequenas concessões feitas em nome da praticidade.&lt;/p&gt;</description></item><item><title>Munin: links internos para Hugo com IA</title><link>https://devops.sarmento.org/posts/munin-links-internos-para-hugo-com-ia/</link><pubDate>Fri, 17 Apr 2026 10:49:00 +0000</pubDate><guid>https://devops.sarmento.org/posts/munin-links-internos-para-hugo-com-ia/</guid><description>&lt;p&gt;No &lt;a href="https://devops.sarmento.org/post/hugin-tags-e-resumos-para-hugo-com-ia/"&gt;post sobre o Hugin&lt;/a&gt; contei como resolvi o problema de tags e resumos no meu blog Hugo. Mas tinha outro problema, menos óbvio e mais chato: links internos. Aqueles links que conectam um post a outro, que ajudam o leitor a navegar pelo conteúdo relacionado, e que o Google adora ver num site bem estruturado.&lt;/p&gt;
&lt;p&gt;O problema é que ninguém linka nada. Você escreve um post sobre systemd timers, outro sobre cron, outro sobre launchd — e nenhum dos três menciona os outros. São ilhas de conteúdo que poderiam estar conectadas. A solução óbvia é reler cada post, lembrar quais outros existem, e ir inserindo links manualmente. Com 30 posts, é viável. Com 400, é insano.&lt;/p&gt;</description></item><item><title>De WordPress a Hugo: Temas Não São o Que Você Pensa</title><link>https://devops.sarmento.org/posts/de-wordpress-a-hugo-temas-nao-sao-o-que-voce-pensa/</link><pubDate>Sat, 04 Apr 2026 14:59:00 +0000</pubDate><guid>https://devops.sarmento.org/posts/de-wordpress-a-hugo-temas-nao-sao-o-que-voce-pensa/</guid><description>&lt;p&gt;Quem trabalha com WordPress por tempo suficiente desenvolve uma intuição sobre o que um tema é e o que ele faz. Essa intuição funciona bem dentro do ecossistema — ela guia decisões sobre estrutura de arquivos, sobre onde colocar lógica e sobre como estender funcionalidades. O problema aparece quando você migra para o Hugo e tenta aplicar esse mesmo modelo mental.&lt;/p&gt;
&lt;p&gt;As palavras são parecidas — templates, layouts, partials — mas o que elas significam na prática é radicalmente diferente. Um tema no WordPress é, em essência, uma aplicação PHP completa que consulta banco de dados, toma decisões de lógica e renderiza HTML, tudo no mesmo lugar. Um tema no Hugo é uma coleção de templates que recebe dados já processados e se limita a apresentá-los. Parece uma diferença sutil até você sentar para construir o seu primeiro layout e perceber que quase tudo que você sabia precisa ser reaprendido.&lt;/p&gt;</description></item><item><title>Apagando e-mails automaticamente no Apple Mail com AppleScript + launchd</title><link>https://devops.sarmento.org/posts/apagando-e-mails-automaticamente-no-apple-mail-com-applescript-launchd/</link><pubDate>Mon, 30 Mar 2026 20:24:00 +0000</pubDate><guid>https://devops.sarmento.org/posts/apagando-e-mails-automaticamente-no-apple-mail-com-applescript-launchd/</guid><description>&lt;p&gt;Minha caixa de entrada vive cheia de notificações com assunto no formato &lt;code&gt;[Ticket ID: 12345] Atualização do chamado&lt;/code&gt;. Elas são úteis por algumas horas e depois viram ruído. Não são e-mails que precisam ser arquivados, respondidos ou revisitados, então acabam só ocupando espaço mental.&lt;/p&gt;
&lt;p&gt;Apagar manualmente é aquele tipo de tarefa pequena que nunca vira prioridade, mas que cobra juros em distração. Então resolvi tratar como qualquer outro problema recorrente: automatizar localmente, sem depender de serviço externo, sem &lt;em&gt;webhook&lt;/em&gt; e sem integrações. A ideia é rodar periodicamente um script que mova para o lixo as &lt;a href="https://devops.sarmento.org/experiencias-com-mensagens-subliminares/"&gt;mensagens&lt;/a&gt; cujo assunto contenha um padrão específico e que tenham mais de 48 horas.&lt;/p&gt;</description></item><item><title>Expondo serviços do homelab na internet com Cloudflare Tunnel</title><link>https://devops.sarmento.org/posts/expondo-servicos-do-homelab-na-internet-com-cloudflare-tunnel/</link><pubDate>Fri, 27 Mar 2026 18:24:00 +0000</pubDate><guid>https://devops.sarmento.org/posts/expondo-servicos-do-homelab-na-internet-com-cloudflare-tunnel/</guid><description>&lt;p&gt;No &lt;a href="https://devops.sarmento.org/posts/ssh-atras-de-nat-ssh-jcom-resolve/"&gt;post anterior&lt;/a&gt;, mostrei como o SSH-J.com resolve um problema específico: acessar via SSH uma máquina que está atrás de NAT, sem abrir portas no roteador e sem depender de IP público. O túnel reverso funciona bem para sessões interativas e transferência de arquivos, e o SSH-J.com como jump host torna tudo trivial de configurar. Para SSH, continua sendo a solução mais simples que conheço.&lt;/p&gt;
&lt;p&gt;Mas SSH é só uma peça do quebra-cabeça. Quem mantém um homelab — mesmo que seja só um mini PC embaixo da mesa ou um Raspberry Pi no canto da sala — inevitavelmente acaba rodando serviços web: um leitor de RSS, um dashboard de monitoramento, um Gitea, um Jellyfin, um &lt;a href="https://devops.sarmento.org/posts/immich-suas-fotos-seu-servidor-suas-regras/"&gt;Immich&lt;/a&gt;. Esses serviços escutam em portas HTTP locais e funcionam perfeitamente enquanto você está na mesma rede. O problema aparece quando você quer acessá-los de fora — do escritório, do celular no ônibus, de qualquer lugar que não seja a sua rede local.&lt;/p&gt;</description></item><item><title>Convertendo imagens automaticamente para WEBP e AVIF</title><link>https://devops.sarmento.org/posts/convertendo-imagens-automaticamente-para-webp-e-avif/</link><pubDate>Thu, 26 Mar 2026 22:19:00 +0000</pubDate><guid>https://devops.sarmento.org/posts/convertendo-imagens-automaticamente-para-webp-e-avif/</guid><description>&lt;p&gt;Os dois posts anteriores montaram a infraestrutura de monitoramento — &lt;a href="https://devops.sarmento.org/posts/monitorando-arquivos-e-pastas-com-launchd-watchpaths-na-pratica/"&gt;&lt;code&gt;WatchPaths&lt;/code&gt; no macOS&lt;/a&gt;, &lt;a href="https://devops.sarmento.org/posts/monitorando-arquivos-e-pastas-no-linux-com-systemd-path-units-e-inotifywait-para-quem-nao-tem-root/"&gt;systemd path units e &lt;code&gt;inotifywait&lt;/code&gt; no Linux&lt;/a&gt; — e prometeram que os scripts viriam depois. O gatilho está pronto: o launchd ou o systemd detecta quando algo muda num diretório e dispara um comando. Falta o comando.&lt;/p&gt;
&lt;p&gt;Este post entrega o script de conversão de imagens que aqueles gatilhos vão disparar. O objetivo é simples: PNGs e JPGs entram numa pasta, WEBP ou AVIF saem. Os originais são apagados ou movidos, dependendo da configuração. O script detecta quais encoders estão disponíveis na máquina e escolhe o melhor entre os instalados, com uma cadeia de fallback que garante funcionamento mesmo quando a ferramenta ideal não está presente. Se nenhum encoder compatível for encontrado, o script avisa o que instalar e em qual gerenciador de pacotes.&lt;/p&gt;</description></item><item><title>Monitorando arquivos e pastas no Linux com systemd path units (e inotifywait para quem não tem root)</title><link>https://devops.sarmento.org/posts/monitorando-arquivos-e-pastas-no-linux-com-systemd-path-units-e-inotifywait-para-quem-nao-tem-root/</link><pubDate>Thu, 26 Mar 2026 19:27:00 +0000</pubDate><guid>https://devops.sarmento.org/posts/monitorando-arquivos-e-pastas-no-linux-com-systemd-path-units-e-inotifywait-para-quem-nao-tem-root/</guid><description>&lt;p&gt;No &lt;a href="https://devops.sarmento.org/posts/monitorando-arquivos-e-pastas-com-launchd-watchpaths-na-pratica/"&gt;post anterior&lt;/a&gt;, o launchd do macOS monitorava arquivos e diretórios com &lt;code&gt;WatchPaths&lt;/code&gt; para disparar scripts automaticamente quando algo mudava. O modelo é reativo — em vez de rodar um backup a cada hora ou uma conversão a cada cinco minutos, o sistema observa o caminho no disco e só executa o job quando detecta uma modificação real. Sem polling, sem desperdício, sem janela de vulnerabilidade entre a mudança e a ação.&lt;/p&gt;</description></item><item><title>Monitorando arquivos e pastas com launchd: WatchPaths na prática</title><link>https://devops.sarmento.org/posts/monitorando-arquivos-e-pastas-com-launchd-watchpaths-na-pratica/</link><pubDate>Thu, 26 Mar 2026 18:56:00 +0000</pubDate><guid>https://devops.sarmento.org/posts/monitorando-arquivos-e-pastas-com-launchd-watchpaths-na-pratica/</guid><description>&lt;p&gt;No &lt;a href="https://devops.sarmento.org/posts/agendando-tarefas-no-macos-com-launchd-sem-cron-sem-gambiarra/"&gt;post anterior sobre launchd&lt;/a&gt;, o agendamento funcionava por horário: o &lt;code&gt;StartCalendarInterval&lt;/code&gt; definia &amp;ldquo;todo dia às 7h&amp;rdquo; e o sistema cuidava do resto, incluindo recuperar execuções perdidas quando o Mac estava dormindo. Para tarefas periódicas como enviar um briefing diário ou rodar um script de manutenção, esse modelo resolve perfeitamente — é o equivalente funcional do cron, mas integrado ao ciclo de vida do macOS.&lt;/p&gt;
&lt;p&gt;Só que nem toda automação faz sentido atrelada a um relógio. Tem tarefas que só precisam acontecer quando alguma coisa muda. Um backup que roda de hora em hora está desperdiçando 23 execuções por dia se o banco de dados só foi alterado uma vez. Uma conversão de imagens que roda a cada 5 minutos não tem o que converter na grande maioria das vezes, e quando finalmente tem, já se passaram até 5 minutos desde que o arquivo apareceu. O modelo baseado em tempo funciona, mas é um polling disfarçado de agendamento — e polling é quase sempre a solução menos elegante para qualquer problema de sincronização.&lt;/p&gt;</description></item><item><title>SSH atrás de NAT? SSH-J.com resolve.</title><link>https://devops.sarmento.org/posts/ssh-atras-de-nat-ssh-jcom-resolve/</link><pubDate>Wed, 25 Mar 2026 22:26:00 +0000</pubDate><guid>https://devops.sarmento.org/posts/ssh-atras-de-nat-ssh-jcom-resolve/</guid><description>&lt;p&gt;Você trabalha remoto, tem um servidor em casa, um Raspberry Pi rodando serviços, ou uma máquina no escritório que precisa acessar de vez em quando. O cenário é comum e a solução óbvia é o SSH — que já está instalado, é seguro e funciona há décadas. O problema é que entre a sua máquina e o resto da internet existe um roteador, um NAT, e possivelmente um provedor que não te dá IP público fixo ou que bloqueia portas de entrada. De repente, o protocolo mais confiável da administração de sistemas se torna inacessível de fora da sua rede local.&lt;/p&gt;</description></item></channel></rss>