Governança, segurança e confiabilidade · 11 min de leitura

Como agendar rotinas de software respeitando fuso, calendário e atrasos

Defina o significado de uma recorrência, trate execuções perdidas e teste fronteiras de horário antes de automatizar uma rotina empresarial.

Por Tironi Tech · Publicado em · Atualizado em

Executar todos os dias às oito horas é uma regra incompleta quando existem unidades em fusos diferentes, feriados e indisponibilidade. O agendamento precisa representar a intenção do negócio e decidir o que fazer quando a hora prevista não pode ser cumprida.

O que você vai levar deste guia

  • Diferencie horário local recorrente de intervalo fixo entre execuções.
  • Identifique cada ocorrência e defina o tratamento de atraso e sobreposição.
  • Teste mudanças de calendário sem depender de esperar a data real.
Da recorrência à execução confirmada
  1. Definir calendário
  2. Calcular ocorrência
  3. Registrar execução
  4. Tratar impedimentos
  5. Conferir conclusão

A ocorrência prevista e a execução efetiva são registros distintos. A diferença entre elas explica atrasos e evita esconder trabalho perdido.

Traduza a recorrência para uma frase operacional completa

Uma instrução como “rodar diariamente” não informa em qual horário, fuso ou calendário a rotina deve acontecer. Também não diz o que fazer se o sistema estiver fora do ar. Antes de escolher um agendador, escreva a intenção com precisão: preparar a lista de visitas de cada unidade às sete horas do horário local, em dias de operação, usando dados confirmados até aquele momento. Essa frase permite discutir o resultado com quem depende da rotina.

No exemplo fictício da empresa Roteiro Nacional, unidades de atendimento recebem uma lista de atividades antes do início do expediente. Algumas abrem aos sábados e outras não. Uma rotina global configurada pelo relógio do servidor entrega listas em horários inconvenientes para parte da operação. A correção não é apenas somar ou subtrair horas no código; é representar o contexto temporal de cada unidade e manter as exceções que fazem parte de seu funcionamento.

Registre quem é responsável pelo calendário e quem pode alterar a regra. Se o supervisor muda o horário de abertura, a automação precisa receber essa mudança por um caminho conhecido. Não espalhe horários em várias configurações independentes sem indicar qual prevalece. Uma rotina previsível depende tanto da manutenção da regra quanto do mecanismo que dispara a execução.

    Diferencie instante, horário local e intervalo

    Um instante identifica um ponto na linha do tempo. Um horário local descreve como esse ponto aparece em um contexto de fuso. Uma recorrência de calendário determina novos instantes a partir de uma regra, enquanto um intervalo fixo mede duração entre ocorrências. Essas diferenças importam quando o requisito é acompanhar a abertura da unidade, e não simplesmente esperar a mesma quantidade de segundos desde a execução anterior.

    A documentação do EventBridge Scheduler descreve tipos de agendamento e tratamento de fusos e mudanças sazonais de horário. Ela ilustra por que o comportamento do mecanismo escolhido deve ser conferido explicitamente. Não presuma que todo agendador interpreta cron, intervalos ou horários repetidos da mesma maneira. O produto precisa adotar uma política e verificar se a configuração da ferramenta a implementa.

    Na Roteiro Nacional fictícia, uma lista antes do expediente segue o calendário local. Já uma checagem técnica de disponibilidade pode seguir um intervalo fixo, porque seu propósito é observar o sistema periodicamente. Usar a mesma abstração sem distinguir finalidade cria ajustes manuais desnecessários. Armazene a regra original e o contexto necessário para recalcular futuras ocorrências, em vez de guardar apenas o próximo instante e perder a intenção que o produziu.

      Defina calendário, exceções e precedência

      Liste dias de operação, feriados aplicáveis e exceções específicas, como abertura extraordinária ou fechamento para inventário. Determine qual regra prevalece quando há conflito. Um feriado pode suspender a rotina por padrão, mas uma exceção aprovada para a unidade pode reativá-la. Essa precedência precisa ser visível e testável. Se várias fontes alteram o calendário, registre versão, origem e data de atualização para explicar por que uma ocorrência foi calculada.

      Evite embutir uma lista de feriados sem processo de manutenção e presumir que vale para todas as localidades. O artigo não estabelece quais datas são feriados em uma região; essa informação deve vir de uma fonte adequada ao negócio e ser mantida por quem responde pelo calendário. O sistema precisa permitir correções sem exigir uma nova versão inteira do software quando essa flexibilidade fizer parte do uso esperado.

      Mostre uma prévia das próximas ocorrências antes de ativar ou alterar a regra. A pessoa responsável consegue reconhecer que uma segunda-feira foi pulada indevidamente ou que uma abertura especial foi ignorada. Inclua o fuso e a razão de exceções relevantes. Uma expressão técnica isolada é difícil de revisar; uma lista de datas previstas ajuda a conferir o significado real sem exigir que a equipe conheça a sintaxe do agendador.

        Identifique cada ocorrência separadamente da tentativa

        Uma ocorrência é o trabalho previsto para determinado período ou horário. Uma tentativa é uma execução que busca concluí-lo. Separe as duas identidades para permitir repetição sem criar outro trabalho lógico. No exemplo fictício, a lista da unidade leste para a manhã de terça tem uma ocorrência própria. Se o processo falha e tenta novamente, continua sendo a mesma lista prevista, não uma segunda obrigação de entrega.

        Registre instante previsto, início efetivo, fim, estado e versão da regra que criou a ocorrência. Esses dados explicam se houve atraso no disparo, espera na fila ou processamento longo. Não mantenha apenas um campo de última execução, porque ele não mostra lacunas entre períodos. Um sistema pode ter executado hoje e ainda ter deixado a rotina de ontem sem tratamento. A visibilidade precisa representar tanto o que aconteceu quanto o que era esperado.

        Defina como evitar execução simultânea da mesma ocorrência por trabalhadores diferentes. O mecanismo deve funcionar sob concorrência e permitir recuperação quando um trabalhador desaparece. Uma marca permanente de “em execução” sem prazo ou verificação pode prender a rotina. Uma marca frágil pode permitir duplicidade. A escolha técnica depende do ambiente, mas a garantia deve ser demonstrada com dois processos tentando assumir a mesma ocorrência.

          Escolha uma política para ocorrências perdidas

          Depois de uma indisponibilidade, o sistema precisa decidir o destino dos horários que passaram. Há tarefas em que cada período exige processamento, como fechar um conjunto de registros por dia. Outras só precisam do estado atual, como preparar uma visão para o próximo expediente. Executar todas as ocorrências antigas pode gerar arquivos inúteis e mensagens atrasadas; descartá-las pode perder trabalho necessário. A política deve ser definida por tipo de rotina.

          Na empresa fictícia, uma lista de visitas que não foi entregue antes do expediente ainda pode ser útil durante a manhã, mas perde finalidade depois do encerramento do dia. A equipe define uma janela de recuperação e um estado explícito para ocorrência expirada. Isso não significa apagar a falha: o histórico deve mostrar que a entrega não ocorreu no prazo. Uma próxima lista bem-sucedida não elimina a necessidade de revisar o impacto da anterior.

          Considere a capacidade de recuperar várias pendências. Se cada execução leva tempo e a indisponibilidade gerou muitas ocorrências, defina ordem e limite de concorrência. Não deixe a recuperação consumir todos os recursos e atrasar a rotina atual sem uma decisão consciente. Mostre quantidade e idade das pendências e permita que a equipe acompanhe o progresso. Uma política de atraso só está completa quando inclui como o sistema volta a uma situação normal.

            Trate sobreposição e mudanças durante a execução

            Uma rotina pode demorar mais que o intervalo entre ocorrências. Decida se a próxima espera, é ignorada, substitui a anterior ou executa em paralelo com isolamento. Cada escolha tem implicações. Ignorar pode ser adequado para uma verificação que só precisa de um resultado recente; não serve automaticamente para uma tarefa que precisa processar cada período. O comportamento deve estar ligado à finalidade e não ser um efeito acidental da quantidade de trabalhadores.

            Pense também em alterações de calendário enquanto há ocorrências já criadas. Se o horário de abertura muda, quais execuções futuras serão recalculadas? Uma ocorrência em andamento usa a regra antiga ou deve ser interrompida? No exemplo fictício, a equipe pode preservar a execução já iniciada e recalcular apenas as futuras, mas isso precisa ser uma decisão explícita. Registre a versão da regra em cada ocorrência para que o histórico continue explicável depois da alteração.

            Evite que uma edição gere duplicidade por criar novas ocorrências sem cancelar ou relacionar as anteriores. Uma mudança de sete para oito horas no mesmo dia pode produzir duas listas se a identidade depender apenas do instante. Considere a chave operacional do trabalho, como unidade e data de referência, quando isso corresponder ao negócio. A Tironi Tech pode desenvolver esse modelo de ocorrência e revisão para que o calendário da equipe não se transforme em disparos desconectados.

              Teste fronteiras temporais com um relógio controlado

              Prepare testes que avancem o tempo de forma controlada, sem esperar datas reais. Inclua virada de dia, mês e ano, fim de semana e exceções locais. Para fusos com mudanças sazonais, teste horários que não existem ou aparecem duas vezes conforme as regras aplicáveis ao cenário. O objetivo é verificar a política escolhida e a capacidade da biblioteca ou serviço, não fazer suposições sobre quais regiões terão mudanças no futuro.

              Teste também a diferença entre relógio do aplicativo e do agendador quando houver componentes separados. Um trabalhador pode receber a ocorrência com atraso e deve usar sua identidade prevista, em vez de atribuí-la automaticamente ao dia atual. Verifique a apresentação na interface com usuários de fusos distintos. Quem acompanha uma unidade precisa saber se a hora mostrada é a local da unidade, a sua própria ou uma referência técnica, especialmente ao investigar um incidente.

              Inclua reinício antes e depois do instante previsto, repetição do disparo e execução que atravessa a meia-noite. Confira o estado final e a quantidade de efeitos produzidos. Uma rotina que muda de data durante o processamento não deve trocar silenciosamente o período dos dados. Defina a referência temporal no início da ocorrência e use-a de forma consistente, salvo quando o contrato exigir uma atualização explícita durante a execução.

                Observe o cumprimento da rotina, não apenas o processo ativo

                Um agendador saudável pode disparar tarefas que falham, e um trabalhador ativo pode estar preso em uma execução antiga. Monitore ocorrências previstas sem conclusão, atraso de início, duração e resultado. Relacione o alerta à expectativa operacional: a lista precisa estar disponível antes de determinado momento. Um aviso de processo desligado ajuda a investigar, mas não substitui a verificação de que o trabalho necessário foi entregue.

                Forneça uma visão por unidade e data de referência. A equipe deve conseguir localizar a ocorrência, entender se foi suspensa por calendário, atrasada por infraestrutura ou encerrada com erro de dados. Distinga ausência planejada de falha. Se o sábado não é dia de operação, não deve aparecer como atraso. Se uma exceção autorizou funcionamento e a rotina não ocorreu, o sistema precisa reconhecer essa expectativa adicional.

                Finalize a implantação com um roteiro de intervenção: como corrigir calendário, retomar uma ocorrência válida e encerrar uma pendência que perdeu utilidade. Preserve o histórico das decisões e evite reexecutar efeitos externos sem conferir o estado. Uma automação temporal confiável permite responder por que havia trabalho previsto, quando ele realmente ocorreu e o que foi feito quando não pôde acontecer. Essa clareza torna a rotina sustentável mesmo quando horários, equipes e volume mudam.

                  Perguntas frequentes

                  Executar a cada 24 horas equivale a executar às oito todos os dias?

                  Não necessariamente. Um intervalo fixo e uma regra de horário local têm semânticas diferentes, especialmente em mudanças de fuso ou de horário sazonal.

                  Devo executar todas as ocorrências perdidas após uma queda?

                  Depende da tarefa. Algumas exigem recuperação de cada período; outras devem produzir apenas o estado atual. Essa política precisa ser definida antes da indisponibilidade.

                  Uma expressão cron resolve feriados?

                  Não por si só. Calendários de feriados e exceções operacionais normalmente precisam de uma regra adicional e de uma fonte mantida conforme a operação.

                  Automatize rotinas com uma regra de tempo explícita

                  A Tironi Tech pode desenvolver agendamentos, acompanhamento e recuperação de execuções alinhados ao calendário das suas equipes.

                  Planejar minhas rotinas automáticas

                  Artigos relacionados

                  Fontes consultadas