Processos que rodam à noite: o que é, como configurar e o que dá errado
ADC noturno é basicamente qualquer processo de coleta ou processamento de dados programado para executar fora do horário comercial. No meu caso, costuma ser algo ligado a sincronização de dispositivo, backup de logs, atualização de firmware em lote ou extração de dados de sensores. A ideia é simples: deixar a máquina trabalhar enquanto ninguém está usando ela.
como funciona o adc noturno na prática
A maioria dos sistemas modernos permite agendar tarefas usando um scheduler integrado ou um cron job simples. Você aponta o script, define a janela de execução e pronto. O problema é que "pronto" raramente é permanente. Nos primeiros meses de operação, tudo parece funcionar. Depois de algum tempo, começam os problemas de borda. No setup típico, o processo segue esta sequência: verifica dependências, lê a configuração, executa a coleta ou processamento, registra o resultado e envia notificação se houver falha. O que a maioria dos tutoriais não mostra é que etapas intermediárias como autenticação renovada, verificação de espaço em disco ou confirmação de rede costumam ser onde tudo quebra.
Eu já perdi horas debugando um job noturno que simplesmente não rodava. O log dizia "executado com sucesso" mas nenhum arquivo era gerado. O problema? Um timer de renovação de certificado SSL que estava configurado para 12 horas mas o job rodava de 24 em 24. A sessão expirava no meio do processo e o sistema marcava como sucesso porque tratava erro de rede como gracefully degraded. A solução foi adicionar uma verificação de integridade pós-execução que compara o hash dos arquivos produzidos com uma lista esperada.
Componentes essenciais
Scheduler é o motor. Pode ser o cron do Linux, Task Scheduler do Windows, ou um sistema como Airflow para pipelines mais complexos. O scheduler precisa ser confiável. Use monotonic clock, evite cron jobs espalhados por máquinas diferentes que dependem uns dos outros sem coordenação. O log é mais importante que você imagina. Um log bem estruturado tem timestamp, nível, identificador da execução e mensagem. Sem identificador de execução, quando algo falha às 3h da manhã, você não consegue correlacionar eventos. Eu uso um UUID gerado no início de cada execução e incluo ele em todas as linhas de log.
Monitoramento não é opcional. Alerta de falha deve chegar em menos de 5 minutos. Nada de verificar manualmente se o job rodou. Se você precisa lembrar de verificar, o sistema já está quebrado. Sete minutos de configuração de alertas economizam horas de caça a problemas.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Erros comuns que ninguém conta
Fuso horário é o vilão número um. Um job configurado para rodar às 2h pode estar rodando às 2h do fuso errado. Sempre use UTC internamente e converta apenas na exibição. Já vi gente perder dias porque o scheduler estava em UTC e eles achavam que era horário local. Sobreposição de execuções. Se o job leva 3 horas e o scheduler agenda para rodar a cada 2, você vai ter execuções sobrepostas concorrendo pelos mesmos recursos. Configure um lock_file ou use flag de já_em_andamento para prevenir isso.
Espaço em disco parece óbvio mas é o erro mais frequente em ambientes de produção. Um job noturno que nunca verifica espaço disponível pode encher o disco e derrubar tudo. Adicione uma verificação de espaço antes de começar e pare com gracefully se estiver abaixo do limite.
Configuração básica passo a passo
Vamos supor que você tenha um script Python que coleta dados e quer rodá-lo todo dia às 3h. No Linux, o comando ficaria algo como: 0 3 * * * /usr/bin/python3 /caminho/do/script.py >> /var/log/adc_noturno.log 2>&1
Isso é o mínimo funcional. O que você precisa adicionar além disso: verificação de saída do processo (se retornou código 0), limite de tamanho do log com logrotate, e um wrapper que verifique se uma execução anterior ainda está rodando antes de iniciar uma nova. O wrapper em si é simples. Um arquivo de lock com timestamp e verificação de idade resolve 90% dos problemas de sobreposição. Se o lock existe e tem mais de 4 horas, assume que a execução anterior travou e força o cleanup.
Quando o ADC noturno não é a solução
Se seus dados precisam estar disponíveis em tempo real ou com latência baixa, processamento noturno não serve. Nesses casos, considere streaming com Kafka ou similar. O trade-off é custo e complexidade maiores. Processamento batch noturno é rápido de implementar e barbatamente mais barato operacionalmente. Também funciona mal quando as fontes de dados não estão disponíveis 24h. Se seu sistema depende de um serviço de terceiro que só opera em horário comercial, um job às 3h da manhã vai falhar consistentemente. Nesse caso, ajuste o horário de execução para logo após o levantamento do serviço fonte.
Checklist antes de colocar em produção
Teste o job manualmente pelo menos três vezes em horários diferentes. Verifique se os dados de saída são consistentes. Confirme que os alerts estão funcionando enviando um teste. Documente o horário de execução, os gatilhos de falha esperados e o procedimento de recuperação. Se alguém tiver que descobrir isso lendo o código no meio de uma emergência, você já errou antes.