Jobs agendados¶
Além de manter stacks sincronizadas, o wireops executa containers Docker avulsos em um agendamento cron: backups noturnos de banco de dados, rotação de logs, limpeza, health-checks. Tudo isso é definido por um job.yaml versionado no repositório, sem configuração paralela na interface que possa divergir dele.
O arquivo job.yaml¶
name: "Backup do banco de dados"
description: "Backup noturno do postgres"
cron: "0 2 * * *"
image: "postgres:15-alpine"
command: ["pg_dump", "-h", "db", "-U", "postgres", "mydb"]
tags: ["backup", "prod"]
group: "database"
mode: "once" # once ou once_all
volumes:
- "/opt/backups:/backups"
network: "prod_network"
resources:
cpu: "0.5" # obrigatório
memory: "512m" # obrigatório
timeout: "15m" # obrigatório
configs:
- name: "backup-script"
path: "scripts/backup.sh"
target: "/scripts/backup.sh"
mode: "0755" # opcional, padrão somente leitura
| Campo | Obrigatório | Descrição |
|---|---|---|
name |
Sim | Nome exibido. Sincronizado do Git a cada execução, então renomear pela interface não tem efeito; edite o arquivo. |
description |
Não | Exibida junto ao job na interface. |
cron |
Sim | Expressão cron padrão de 5 campos, avaliada no fuso horário do servidor. |
image |
Sim | Imagem Docker a executar. Sujeita às mesmas checagens da política do worker aplicadas às stacks. |
command |
Não | Aceita uma string única (dividida por espaço) ou uma lista YAML. Use lista se algum argumento contiver espaço. |
tags |
Não | Seleciona quais workers são elegíveis para rodar o job (veja modos de despacho). Vazio significa qualquer worker. |
group |
Não | Rótulo livre para organizar jobs relacionados na interface. Apenas cosmético. |
mode |
Não | once (padrão) ou once_all, veja abaixo. |
volumes |
Não | Bind mounts ou volumes nomeados, mesma sintaxe do Compose. Sujeitos à política (block_host_volumes, allowed_volumes). |
network |
Não | Rede Docker do container do job. Sujeita à política (allowed_networks). |
resources.cpu / .memory / .timeout |
Sim, os três | Obrigatórios para que um job com defeito não consuma os recursos do host indefinidamente. timeout cancela o container se ele exceder o tempo. |
configs |
Não | Arquivos versionados no Git, resolvidos pelo servidor e montados (somente leitura, ou conforme mode) em target. Como jobs não têm arquivo Compose, alvo e modo são explícitos aqui, diferente do elemento nativo configs: de uma stack. |
Modos de despacho¶
once: o job roda em exatamente um worker que combine com astags, escolhido por round-robin. Use para tudo que não deve rodar em duplicidade (um backup, uma migração de banco).once_all: o job roda simultaneamente em todos os workers que combinem. Use para manutenção de frota (limpar imagens soltas em todos os hosts, girar logs em todo lugar).
O que acontece a cada disparo agendado¶
- O wireops resolve quais workers combinam com as
tagsdo job. - Cria um registro em
job_runspor despacho e carrega a política efetiva do worker de destino. - Imagem, volumes e rede do job são validados contra essa política. Uma violação falha a execução imediatamente (status
error) sem que o job chegue ao worker; é a mesma checagem "fail-closed" que um deploy de stack passa. - O worker executa o container (
docker run --rm) e reporta código de saída e output ao terminar. - O wireops marca a execução como
successoufailed. Se uma execução travar, rodando por mais de uma hora sem retorno e geralmente porque o worker caiu no meio, uma varredura periódica a marca comostalledpara não ficar pendente para sempre.
Registros de job_runs expiram e são limpos automaticamente após 30 dias.
Execuções avulsas e a API/MCP¶
Um job não precisa esperar o próximo disparo do cron. Dá para disparar uma execução avulsa pela interface ou API, e tudo sobre um job também é legível programaticamente:
- REST: listar jobs e execuções recentes, obter o
job.yamlbruto de um job, listar arquivosjob.yamlcandidatos em um repositório antes de agendar. - Servidor MCP:
list_jobs,get_job_definition,list_repo_job_filesegenerate_job_yamlexpõem os mesmos dados (e um scaffold) a um assistente de IA, sempre somente leitura e limitado pelo RBAC da chave de API usada.
Relacionado¶
- Políticas: o que a imagem, os volumes e a rede de um job são checados antes de ele rodar.
- Fluxos principais: onde jobs agendados se encaixam junto à sincronização de stacks e à conexão de workers.