Pular para o conteúdo
potz.
← Blog

Produto & Engenharia

A rotina que morre sem dar erro

Tarefas agendadas costumam falhar do jeito mais caro: sem alarme. O que passamos a vigiar não é se deu erro, é quando a rotina tocou no dado pela última vez.

Quase todo sistema que fazemos tem rotinas agendadas: sincronizar pedidos, emitir notas, mandar lembrete, fazer backup. E a falha mais comum dessas rotinas não é um erro vermelho no log. É simplesmente não rodar — ou rodar só a metade — sem avisar ninguém.

Três jeitos de morrer calado

O primeiro é o tempo limite. Plataformas de hospedagem cortam a execução depois de alguns segundos se ninguém configurar outro valor. A rotina começa, processa a primeira tarefa e é interrompida. No painel, aparece como executada.

O segundo é o laço que desiste cedo. Um `break` colocado para tratar um caso específico acaba encerrando a rotina inteira. Se ela roda uma vez por dia, só a primeira tarefa da lista acontece — todo dia, para sempre.

O terceiro é a rotina que nunca foi ligada. O script existe numa pasta, funciona quando alguém roda à mão, e todo mundo supõe que está agendado. Função que só existe em uma pasta de scripts é rotina morta.

O que vigiar no lugar de "deu erro?"

A pergunta certa não é se a rotina falhou, é quando ela tocou no dado pela última vez. Para cada rotina importante guardamos a data da última escrita efetiva — o último pedido sincronizado, a última nota emitida, o último backup conferido — e um vigia compara essa data com o esperado. Passou do prazo, chega aviso no celular.

Isso pega os três casos acima, porque nenhum deles escreve dado novo. E pega também falhas que ninguém imaginou: credencial vencida, API que mudou, disco cheio.

Backup é o caso mais traiçoeiro

Rotina de backup que "rodou" não significa backup que existe. Por isso a nossa só considera um backup válido depois de conferir o arquivo — abrindo o índice do dump ou comparando a assinatura do arquivo enviado com a original. E a limpeza de cópias antigas só acontece quando a cópia nova passou nessa conferência. Se a conferência falhar, nada é apagado.

Se você tem um sistema em produção, liste as rotinas que dependem de agendamento e responda, para cada uma: como eu saberia, amanhã de manhã, que ela não rodou hoje? Se a resposta for "o cliente reclamaria", vale construir o vigia antes.