Voltar ao blog Self-hosting

A sua aplicação autoalojada precisa de um agendador? Uma lista de verificação de preparação para tarefas agendadas

Uma aplicação autoalojada pode parecer completa numa demonstração, mas falhar operacionalmente se o seu trabalho agendado nunca for executado. Utilize esta lista de verificação orientada pela documentação para identificar dependências de tarefas, escolher um modelo de execução suportado, testar o comportamento em caso de falha e atribuir uma responsabilidade clara antes do lançamento.

Equipa de operações a analisar uma lista de verificação de preparação para tarefas agendadas numa aplicação autoalojada

Porque as tarefas agendadas são uma dependência operacional, e não um detalhe de implementação

Uma interface web prova que os utilizadores conseguem abrir páginas e submeter dados. Não prova que a aplicação concluirá o trabalho que deve ocorrer mais tarde, sem a presença de um utilizador. Em muitas aplicações autoalojadas, esse trabalho não assistido é essencial para o serviço que os utilizadores esperam.

A [documentação de trabalhos em segundo plano do Nextcloud Server 26](https://docs.nextcloud.com/server/26/admin_manual/configuration_server/background_jobs_configuration.html) oferece um exemplo específico dessa versão quanto ao âmbito: os trabalhos em segundo plano documentados abrangem limpeza da base de dados, recolha de ficheiros temporários, verificações de ficheiros em armazenamento externo, e-mails de atividade e expiração do caixote do lixo. O conjunto exato de tarefas varia consoante a aplicação, mas a lição operacional é geral: o trabalho agendado pode afetar a higiene dos dados, notificações, importações, relatórios, integrações e manutenção.

Trate cada fluxo de trabalho agendado como uma dependência de produção com um resultado definido e uma consequência em caso de falha. Uma tarefa que apenas remove ficheiros temporários antigos pode tolerar atrasos. Uma tarefa que envia mensagens urgentes, processa uma importação de cliente ou reconcilia dados empresariais pode não os tolerar.

  • Não aceite que “a aplicação funciona no navegador” como prova de que os fluxos de trabalho não assistidos funcionam.
  • Classifique cada tarefa pelo impacto no negócio: conveniência, operacionalmente importante ou crítica.
  • Defina um atraso máximo tolerável para cada tarefa importante e crítica.
  • Atribua um responsável e um caminho de escalonamento para investigar e recuperar uma execução com falha.
  • Utilize a documentação atual de administração e implementação do fornecedor da aplicação como fonte de autoridade para os requisitos das tarefas.
Porque as tarefas agendadas são uma dependência operacional, e não um detalhe de implementação

Agendador, trabalhador em segundo plano e pedido web: diferenças que afetam a implementação

Estes termos são muitas vezes usados de forma imprecisa, mas descrevem padrões de execução diferentes. Confundi-los pode resultar numa implementação que parece saudável, enquanto trabalho importante é atrasado ou nunca iniciado.

Um agendador inicia trabalho numa hora ou intervalo definido. Uma entrada cron no anfitrião, um temporizador systemd ou um Kubernetes CronJob são exemplos de mecanismos de agendamento. Um trabalhador em segundo plano é um processo que se mantém disponível e consulta ou consome trabalho do sistema de tarefas da aplicação. Um mecanismo acionado por pedido web apenas tenta executar trabalho quando alguém visita a aplicação.

A documentação do Nextcloud fornece exemplos dos três padrões. A [documentação de trabalhos em segundo plano do Server 26](https://docs.nextcloud.com/server/26/admin_manual/configuration_server/background_jobs_configuration.html) indica que o modo AJAX executa uma tarefa numa visita à página e descreve-o como a opção menos fiável, pois depende de visitas regulares. A atual [documentação de comandos de sistema e manutenção do Nextcloud](https://docs.nextcloud.com/server/latest/admin_manual/occ_system.html) também distingue a invocação periódica de cron de um trabalhador persistente de trabalhos em segundo plano que consulta indefinidamente; executar esse trabalhador uma vez equivale a uma única execução de cron. A aplicação escolhida pode suportar padrões diferentes, pelo que deve confirmar o modelo suportado em vez de transferir pressupostos de outro produto.

  • Pedido web: adequado apenas quando a documentação oficial o permite explicitamente e a execução irregular é aceitável.
  • Agendador periódico: executa um comando ou tarefa documentada numa cadência definida.
  • Trabalhador contínuo: mantém-se em execução para processar trabalho em fila ou trabalho que se torna disponível.
  • Fila: armazenamento ou mecanismo que retém trabalho para processamento posterior; não é necessariamente o próprio trabalhador.
  • Não presuma que um agendador fornece automaticamente processamento de filas, nem que um trabalhador executa automaticamente manutenção recorrente.
Agendador, trabalhador em segundo plano e pedido web: diferenças que afetam a implementação

Encontre os requisitos de tarefas agendadas na documentação oficial da aplicação

Comece pela documentação do fornecedor relativa a administração, instalação, implementação, linha de comandos e trabalhos em segundo plano. Pesquise nessas fontes termos como cron, agendador, tarefas agendadas, trabalhos em segundo plano, fila, trabalhador, temporizador, manutenção, consumidor de fila, interface de linha de comandos e tarefas recorrentes.

Procure instruções operacionais explícitas, em vez de depender apenas de páginas de funcionalidades. Evidência sólida inclui um comando documentado para execução periódica, um processo de trabalhador documentado, uma definição de ambiente que seleciona um modo de agendamento ou comandos administrativos que listam tarefas e histórico. Por exemplo, a [documentação de comandos de sistema e manutenção do Nextcloud](https://docs.nextcloud.com/server/latest/admin_manual/occ_system.html) documenta comandos para listar tarefas registadas, mostrar tarefas em execução, inspecionar o histórico de tarefas e executar manualmente uma tarefa.

Registe o URL da documentação e a versão da aplicação ou a ramificação da documentação que avaliou. Os requisitos podem mudar entre versões, e este registo torna as atualizações mais seguras de analisar.

  • Identifique cada comando agendado, comando de trabalhador e comando de manutenção documentados.
  • Verifique se o fornecedor indica um método como preferido ou suportado para produção.
  • Determine o utilizador de execução, diretório de trabalho, variáveis de ambiente e permissões necessários.
  • Identifique se as tarefas são registadas dinamicamente por plugins, módulos ou configuração da aplicação.
  • Verifique se a aplicação fornece estado, histórico, um comando de execução manual ou uma ação de teste.
  • Escale qualquer incerteza ao fornecedor, responsável pela manutenção ou operador experiente antes de considerar a carga de trabalho pronta para produção.

Crie um inventário de tarefas agendadas antes de escolher a infraestrutura

Um inventário transforma um requisito vago — “configurar cron” — num plano operacional. Crie um registo por tarefa ou família de tarefas. Inclua trabalho recorrente e trabalho pontual acionado por eventos, pois ambos podem depender de trabalhadores, filas ou procedimentos de recuperação.

O [guia de programadores do Nextcloud Server 26](https://docs.nextcloud.com/server/26/developer_manual/basics/backgroundjobs.html) distingue tarefas únicas em fila de tarefas temporizadas com um intervalo mínimo entre execuções. Esta distinção específica dessa versão é útil em qualquer inventário: um relatório recorrente tem um agendamento; uma importação acionada por carregamento ou evento de API pode, em vez disso, necessitar de consumo fiável da fila. Os controlos operacionais podem sobrepor-se, mas o acionador e a abordagem de recuperação podem diferir.

Mantenha o inventário junto da documentação de implementação e atualize-o ao ativar módulos, alterar integrações ou atualizar a aplicação.

  • Nome da tarefa e referência à documentação do fornecedor.
  • Finalidade comercial e utilizador ou processo afetado.
  • Tipo de acionador: agendamento recorrente, fila acionada por evento, manutenção manual ou misto.
  • Cadência esperada, atraso aceitável e prazo, expressos num fuso horário nomeado.
  • Modelo de execução e comando, trabalhador ou configuração suportados exatos.
  • Responsável pela revisão de rotina e responsável pela resposta a incidentes.
  • Entradas: registos da base de dados, ficheiros, filas, APIs ou configuração.
  • Saídas: mensagens, relatórios, alterações de estado, ficheiros gerados, eliminações ou chamadas a APIs externas. O inventário também deve registar dependências, impacto de falha, comportamento de repetição, política de sobreposição, evidência de sucesso e passos de recuperação.

Defina o comportamento para execuções perdidas, duplicados, sobreposição e tentativas

Um agendamento descreve quando uma tentativa deve começar; não define o que deve acontecer quando os sistemas estão indisponíveis ou uma tentativa anterior ainda está em execução. Estas decisões têm de ser explícitas para fluxos de trabalho críticos.

A [documentação do Kubernetes CronJob](https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/) afirma que o agendamento é aproximado: em algumas circunstâncias, podem ser criados dois Jobs ou nenhum Job. Recomenda que os Jobs sejam idempotentes. Idempotência significa que repetir uma operação não cria um efeito adicional incorreto — por exemplo, uma nova tentativa não deve enviar a mesma mensagem comercial duas vezes nem aplicar a mesma atualização financeira duas vezes.

O Kubernetes também ilustra decisões que existem em muitos sistemas de agendamento, ainda que os nomes sejam diferentes. Os seus [CronJobs](https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/) podem permitir execuções sobrepostas, impedir uma nova execução enquanto a anterior estiver ativa ou substituir uma execução ativa. Podem ignorar um início tardio depois de um prazo definido; quando um CronJob não suspenso não tem esse prazo, as execuções perdidas podem ser agendadas imediatamente. Verifique o comportamento real da sua aplicação e do agendador escolhido, em vez de presumir que estes controlos exatos estão disponíveis.

  • Execução perdida: ignorar, executar uma vez após recuperação ou exigir revisão manual?
  • Execução duplicada: o que torna a tarefa segura para executar mais de uma vez?
  • Sobreposição: duas instâncias podem executar em segurança sobre os mesmos dados ou serviço externo?
  • Tentativa: quantas tentativas, quanto tempo entre tentativas e quais falhas permitem nova tentativa?
  • Tempo limite: quando deve uma execução bloqueada ser tratada como falha?
  • Conclusão parcial: a tarefa pode retomar, compensar ou ser executada novamente em segurança?
  • Efeitos externos: proteja contra e-mails duplicados, chamadas de API duplicadas e processamento repetido de ficheiros.

Defina deliberadamente regras de hora, fuso horário e horário de verão

Uma recorrência sem fuso horário está incompleta. A mesma expressão pode executar a uma hora local diferente depois de uma mudança de servidor, plataforma ou configuração. Os [Kubernetes CronJobs](https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/) utilizam o fuso horário local do gestor do controlador quando nenhum fuso horário é explicitamente definido, enquanto a sua especificação pode definir um fuso horário nomeado, como Etc/UTC.

Para tarefas operacionais, UTC é frequentemente a opção menos ambígua. Para tarefas orientadas ao negócio — como um relatório diário esperado a uma hora comercial local — registe o fuso horário regional nomeado relevante e decida como devem ser tratadas as transições para o horário de verão. Uma hora local pode ocorrer duas vezes ou não ocorrer de todo durante uma mudança de relógio.

Distinga também a hora em que o agendador inicia uma tarefa do período comercial que a tarefa processa. Um relatório diário iniciado às 00:05 não tem necessariamente dados completos do dia anterior se os sistemas ligados chegarem tarde.

  • Registe o fuso horário no inventário, e não apenas num ficheiro de configuração do agendador.
  • Utilize um fuso horário nomeado, e não uma suposição não documentada sobre a hora local do servidor.
  • Defina o comportamento esperado para alterações de horário de verão e exceções de calendário.
  • Defina um limite de dados ou marca de água para relatórios, importações e tarefas de reconciliação.
  • Verifique a sincronização do relógio e os carimbos temporais na aplicação, base de dados, trabalhador e sistema de registo.
  • Teste pelo menos um limite de agendamento e um cenário de recuperação antes da entrada em produção.

Mapeie dependências de serviços ligados e a prontidão de arranque

Uma tarefa agendada pode iniciar com sucesso, mas falhar porque uma dependência não está pronta. As dependências típicas incluem a base de dados da aplicação, serviço de entrega de e-mail, armazenamento de objetos ou ficheiros, APIs externas, DNS e credenciais. Trate-as como parte do desenho operacional da tarefa.

A [documentação do Docker Compose](https://docs.docker.com/compose/how-tos/startup-order/) explica que o Compose inicia contentores por ordem de dependência, mas não espera que um contentor esteja pronto. Um contentor de base de dados pode estar em execução antes de aceitar ligações SQL. O Compose suporta condições baseadas em verificações de integridade, incluindo `service_healthy`, quando um serviço deve aguardar a prontidão de uma dependência. Este é um padrão útil a avaliar sempre que um processo agendado é iniciado juntamente com o resto de uma stack de aplicação.

Separe a ordenação de arranque da resiliência contínua. Uma verificação de integridade pode reduzir falhas evitáveis imediatamente após a implementação, mas uma tarefa continua a precisar de tratamento definido para um reinício da base de dados, uma credencial expirada, uma API indisponível ou uma falha temporária de armazenamento mais tarde.

  • Base de dados: disponibilidade de ligação, compatibilidade do esquema, bloqueios de consultas e janelas de cópia de segurança ou manutenção.
  • Serviço de e-mail: autenticação, configuração do remetente, falhas de limite ou entrega e proteção contra envios duplicados.
  • APIs externas: credenciais, limites de taxa, tempos limite de pedidos, paginação e comportamento seguro de novas tentativas.
  • Armazenamento: permissões, capacidade, disponibilidade de objetos e salvaguardas de limpeza.
  • DNS e TLS: apenas quando a tarefa chama endpoints públicos ou depende de caminhos de retorno externos.
  • Segredos: disponibilidade segura para o processo suportado, sem os expor em registos ou saída da tarefa.

Escolha um modelo de implementação suportado e verifique os seus limites

Não existe um único melhor local para executar trabalho agendado. Selecione o modelo que a aplicação suporta oficialmente e, em seguida, avalie se se adequa à sua capacidade operacional e aos requisitos de falha.

Um agendador gerido pela aplicação pode ser adequado quando o fornecedor o documenta claramente e a aplicação consegue executar em segurança o seu próprio trabalho recorrente. Um agendador ao nível do anfitrião pode adequar-se a uma aplicação que documenta um comando cron ou temporizador do sistema operativo. Como exemplo específico de versão, a [documentação de trabalhos em segundo plano do Nextcloud Server 26](https://docs.nextcloud.com/server/26/admin_manual/configuration_server/background_jobs_configuration.html) descreve o cron do sistema operativo como o método preferido para tarefas regulares e apresenta um temporizador systemd como alternativa. Um processo de trabalhador dedicado pode adequar-se a aplicações que exigem processamento contínuo de filas ou documentam um trabalhador persistente.

Para ambientes contentorizados, uma tarefa agendada ao nível da plataforma pode ser adequada quando a aplicação documenta um comando que pode ser executado como uma invocação isolada e a semântica da plataforma é compreendida. Os [Kubernetes CronJobs](https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/) oferecem controlos de prazos, sobreposição e fuso horário, mas o seu agendamento aproximado significa que o desenho da tarefa continua a necessitar de segurança contra duplicados. Não substitua um método de execução suportado pela aplicação por uma funcionalidade da plataforma.

A infraestrutura gerida pode reduzir o trabalho relacionado com o alojamento da aplicação, mas não decide a semântica das tarefas da aplicação, prazos comerciais, regras de acesso ou política de recuperação. A Airbip implementa instâncias de aplicações do catálogo como cargas de trabalho Docker em servidores na cloud e fornece capacidades de infraestrutura, incluindo automatização de encaminhamento e TLS, verificações de DNS, gestão do ciclo de vida dos serviços e cópias de segurança diárias, semanais e mensais configuráveis. A disponibilidade, configuração e responsabilidade operacional de agendadores, trabalhadores, filas e monitorização específicos da aplicação não são estabelecidas por estas capacidades de infraestrutura e devem ser confirmadas com a Airbip para a aplicação escolhida antes da implementação.

  • Agendamento gerido pela aplicação: verifique como sobrevive a reinícios, como é monitorizado e se a documentação do fornecedor suporta a sua utilização em produção.
  • Cron do anfitrião ou temporizador systemd: verifique o comando, utilizador de execução, ambiente, registos, bloqueio e comportamento de persistência do temporizador.
  • Trabalhador dedicado: verifique supervisão do processo, comportamento de reinício, visibilidade da fila, limites de escalabilidade e encerramento controlado.
  • Agendador da plataforma: verifique fuso horário do agendamento, regras de execuções perdidas, regras de concorrência, permissões e observabilidade.
  • Para todos os modelos: registe o limite exato de suporte na documentação oficial e teste o modelo em condições de falha.

Perguntas frequentes

Como sei se uma aplicação autoalojada precisa de tarefas agendadas?

Leia a documentação oficial de administração, implementação e linha de comandos para encontrar cron, trabalhos em segundo plano, trabalhadores, filas, comandos de manutenção e tarefas agendadas. Se uma funcionalidade depender de e-mails adiados, limpeza, importações, relatórios, indexação ou sincronização, identifique o mecanismo documentado que executa esse trabalho sem um pedido de utilizador.

Um trabalhador em segundo plano é o mesmo que um agendador?

Não. Um agendador inicia trabalho numa hora ou intervalo. Um trabalhador em segundo plano é normalmente um processo em execução contínua que consulta ou consome trabalho. Algumas aplicações precisam de um, do outro ou de ambos. Utilize o modelo documentado pelo fornecedor da aplicação.

As visitas a páginas podem acionar tarefas agendadas em produção?

Apenas se o fornecedor suportar explicitamente esse método e a execução irregular resultante for aceitável. A [documentação do Nextcloud Server 26](https://docs.nextcloud.com/server/26/admin_manual/configuration_server/background_jobs_configuration.html) descreve o seu modo AJAX como dependente de visitas a páginas e como a opção menos fiável. Para trabalho crítico não assistido, utilize um modelo de agendador ou trabalhador independente suportado.

O que devo monitorizar nas tarefas agendadas?

Monitorize evidência de conclusão, não apenas se um processo está em execução. Os sinais úteis incluem a última conclusão bem-sucedida, execuções ativas ou bloqueadas, falhas, duração da execução, acumulação de trabalho quando aplicável, registos e um alerta quando uma tarefa crítica excede o seu atraso máximo aceitável. A [referência da API Kubernetes CronJob](https://kubernetes.io/docs/reference/kubernetes-api/batch/cron-job-v1/) inclui tarefas ativas, lastScheduleTime e lastSuccessfulTime como exemplos de campos de estado.

Porque são importantes as execuções duplicadas?

Os agendadores podem perder, repetir ou sobrepor tentativas de execução em determinadas condições. Um duplicado pode enviar uma mensagem duas vezes, repetir um pedido de API ou processar dados incorretamente. Conceba tarefas críticas para serem idempotentes quando possível e defina uma política de concorrência e de novas tentativas. O Kubernetes observa especificamente que o agendamento de CronJobs é aproximado e recomenda Jobs idempotentes.

Quando deve uma equipa evitar autoalojar uma aplicação com tarefas agendadas?

Pausa ou escolha um modelo com suporte operacional dedicado quando a aplicação tem trabalho agendado crítico, mas não existe um responsável ou caminho de escalonamento, método de implementação suportado, forma de verificar o sucesso, estratégia segura de nova tentativa ou duplicados, ou alguém capaz de responder quando uma execução falha. Isto é especialmente importante quando as tarefas afetam comunicação com clientes, registos empresariais, obrigações de conformidade ou ações externas irreversíveis.

Fontes e leituras adicionais

  1. CronJob — Kubernetes
  2. CronJob API reference — Kubernetes
  3. Background jobs — Nextcloud
  4. System and maintenance commands — Nextcloud
  5. Background jobs (Cron) developer guide — Nextcloud
  6. Control startup and shutdown order in Compose — Docker
  7. HTTPS and TLS certificate resolvers — Traefik Labs
  8. ACME / Let's Encrypt — Traefik Labs
  9. Challenge types — Let's Encrypt / Internet Security Research Group
  10. Troubleshooting Sidekiq — GitLab