← Blog

Cron jobs e workers em segundo plano sem um dyno separado

Railyard

28 de abril de 2026 · 2 min de leitura

A abordagem usual de PaaS trata um cron job e um worker em segundo plano como produtos separados da sua aplicação web — uma aba diferente no painel, às vezes uma linha de preço diferente. Eles não são de fato coisas separadas. São processos da mesma aplicação, que é a parte que vale levar a sério em vez de tratar como um detalhe técnico.

O que a aba Workers realmente oferece

Ela só mostra job runners que consegue de fato encontrar no seu repositório — não uma lista genérica que você configura do zero: processos declarados no Procfile/Procfile.dev/app.json, ou runners que já estão nas suas dependências (Sidekiq, Solid Queue, GoodJob, Resque, Celery, RQ, a queue do Laravel ou o Horizon, um script npm run worker). Adicione um com um clique, ou aponte você mesmo pra qualquer comando de longa duração se nada for detectado. Cada worker roda a própria imagem da aplicação e escala de forma independente do processo web.

Essa última parte importa mais do que parece: um worker não é um deploy menor e separado que vai saindo de sincronia com o web — é o mesmo build, o mesmo release, o mesmo rollback, só um tipo de processo diferente escalado com o próprio número.

Workers que também dormem

Uma aplicação só de worker — sem processo web nenhum, só um consumidor de fila — ainda pode usar Sleep when idle em Settings → General. Ela para quando a CPU reportada fica ociosa por tempo suficiente, e a Railyard a desperta no próprio horário especificamente pra drenar qualquer coisa que esteja na fila, e depois deixa ela voltar a dormir. O padrão que normalmente é montado manualmente (um cron job que desperta um worker com um ping, uma lambda que checa a profundidade de uma fila) é só uma caixinha de marcar aqui.

Cron, separadamente

Cron roda um comando na própria imagem da aplicação num horário agendado (0 3 * * *), com o histórico de execuções mantido — sem container separado, sem imagem separada pra manter sincronizada com o código real da aplicação, porque é literalmente a mesma imagem que tudo mais roda.

Por que vale a pena notar isso

A alternativa — um cron job definido em algum lugar fora do pipeline de deploy da aplicação, apontando pra uma imagem antiga porque ninguém atualizou quando a aplicação fez deploy da última vez — é um modo de falha específico e comum em plataformas que tratam trabalho agendado como cidadão de segunda classe. Rodar cron e workers como tipos de processo de uma aplicação só significa que um deploy que arruma a aplicação arruma os jobs agendados dela e os workers dela ao mesmo tempo, por construção, não por alguém lembrar.

Referência completa: Workers and scheduled jobs.

Adicione um worker a partir do que já está no seu repositório.

A Railyard oferece os job runners que encontra no seu Gemfile ou package.json — um clique, sem serviço novo pra configurar.

Plano grátis, sem cartão, e 14 dias de Pro para cada equipe nova. Um preço fixo por equipe.