Conversor de temporizador systemd para expressão Cron
Converta a sintaxe OnCalendar= de um temporizador systemd para uma expressão cron (minuto hora dia mês dia da semana) de graça. O inverso do nosso conversor "Cron para temporizador systemd". Suporta atalhos nomeados (daily, weekly, etc.) e avisa sobre diferenças semânticas quando dia do mês e dia da semana são especificados juntos.
Mapeamento de componentes do systemd para campos do cron
Cada parte da sintaxe OnCalendar= do systemd corresponde a um dos cinco campos do cron da seguinte forma.
| Posição | Onde aparece no systemd | Campo do cron |
|---|---|---|
| 1 | Minuto na parte de hora (MM em HH:MM:SS) | Minuto |
| 2 | Hora na parte de hora (HH em HH:MM:SS) | Hora |
| 3 | Dia na parte de data (dia em ano-mês-dia) | Dia do mês |
| 4 | Mês na parte de data (mês em ano-mês-dia) | Mês |
| 5 | Prefixo de dia da semana (ex.: Mon, Mon..Fri) | Dia da semana |
O campo de segundos do systemd (SS em HH:MM:SS) não tem equivalente no cron, então é ignorado na conversão (um aviso aparece se os segundos não forem "00").
Mapeamento de abreviações de dia do systemd para números de dia da semana do cron
O systemd usa abreviações em inglês para os dias da semana, enquanto o cron usa números de 0 a 6.
| Abreviação de dia do systemd | Número de dia da semana no cron |
|---|---|
| Sun | 0 |
| Mon | 1 |
| Tue | 2 |
| Wed | 3 |
| Thu | 4 |
| Fri | 5 |
| Sat | 6 |
Mapeamento de atalhos nomeados do systemd para expressões cron
O systemd tem atalhos nomeados legíveis como "daily" e "weekly", e esta ferramenta também pode convertê-los em expressões cron.
| OnCalendar= | Expressão cron |
|---|---|
| minutely | * * * * * |
| hourly | 0 * * * * |
| daily / midnight | 0 0 * * * |
| weekly | 0 0 * * 1 |
| monthly | 0 0 1 * * |
| yearly / annually | 0 0 1 1 * |
Exemplos comuns de conversão
| OnCalendar= | Expressão cron | Significado |
|---|---|---|
| *-*-* *:*:00 | * * * * * | Executa a cada minuto (equivalente a "* * * * *" no cron). |
| *:00/15:00 | */15 * * * * | Executa a cada 15 minutos. |
| Mon..Fri 09:00:00 | 0 9 * * 1-5 | Executa às 9h nos dias úteis (segunda a sexta). |
| *-*-01 00:00:00 | 0 0 1 * * | Executa à meia-noite no dia 1 de cada mês. |
| *-01-01 00:00:00 | 0 0 1 1 * | Executa à meia-noite em 1º de janeiro todo ano. |
| Mon *-*-01 00:00:00 | 0 0 1 * 1 | Um exemplo que especifica tanto um dia do mês (o dia 1) quanto um dia da semana (segunda-feira). O systemd trata isso como uma condição AND (só executa quando ambos coincidem), mas o cron interpreta como uma condição OR (executa quando qualquer um coincide) — então o resultado convertido executa com mais frequência do que a expressão OnCalendar original pretendia. |
Uma expressão OnCalendar que restringe tanto o dia do mês quanto o dia da semana a algo diferente de "*" não pode ser convertida com precisão para cron (systemd usa lógica AND, cron usa lógica OR). Sempre verifique o significado do resultado da conversão em casos assim.
Devolver um temporizador do systemd a uma expressão cron
Esta ferramenta converte o `OnCalendar=` de um temporizador do systemd de volta a uma expressão cron de minuto, hora, dia do mês, mês e dia da semana. Também atende os atalhos com nome, como `daily` e `weekly`. É o reverso da sua ferramenta companheira.
**O que merece cuidado neste sentido é que parte do que o systemd sabe exprimir não tem equivalente no cron.** `OnCalendar=` admite **uma especificação ao segundo** e **intervalos de datas** como `*-*-01..07`, e nenhum dos dois cabe nos cinco campos do cron. Tampouco tem o cron contrapartida alguma para `Persistent=`, que recupera as execuções perdidas enquanto o sistema esteve desligado. **O outro ponto é a semântica do dia do mês e do dia da semana: o systemd trata os dois como conjunção, ao passo que o cron os lê como disjunção.** Uma transferência direta desloca, pois, o agendamento para executar-se mais amiúde, e a ferramenta lhe adverte ali onde isso se aplique.
Como converter
- Insira o valor de OnCalendar= Serve uma forma como `Mon *-*-* 06:00:00`, e também um nome como `daily`.
- Revise a expressão cron gerada É-lhe entregue o resultado transposto para os cinco campos.
- Leia as advertências **São apontadas tanto as especificações que o cron não sabe exprimir quanto as diferenças de semântica.**
- Transcreva-a para um crontab Acrescente depois o comando a executar e a linha fica pronta para registrar.
Dicas para aproveitar melhor
- Você pode digitar atalhos nomeados como "daily", "weekly" ou "monthly" diretamente — eles são convertidos internamente para a expressão cron equivalente (por exemplo, "daily" vira "0 0 * * *").
- Restringir tanto o dia do mês quanto o dia da semana a algo diferente de "*" muda o significado ao converter a lógica AND do systemd na lógica OR do cron. Verifique o aviso nesse caso e confirme se o resultado corresponde à sua intenção.
- Os campos de ano e segundos do OnCalendar não têm equivalente no cron, então são descartados na conversão (um aviso notifica quando isso acontece).
- Útil ao migrar cargas de trabalho para fora do systemd — por exemplo, ao mover uma tarefa agendada para um Kubernetes CronJob (que usa sintaxe estilo cron).
- Para programações simples que não combinam restrições de dia da semana e data (a cada hora, diária, semanal etc.), essa conversão é sempre exata.
Quando é útil
Transferir-se para um ambiente sem systemd
**Os contêineres e os sistemas tipo UNIX mais antigos às vezes não oferecem senão cron.**
Decifrar um temporizador existente
Mesmo sem desenvoltura com a sintaxe de `OnCalendar=`, passá-la a expressão cron deixa clara a frequência.
Manter o mesmo agendamento em dois ambientes
**Onde produção corre systemd e desenvolvimento cron, ambas as configurações podem ser cotejadas.**
Fazer inventário dos seus agendamentos
Convertê-los todos de uma vez lhe dá ocasião de conferir que os intervalos são os que queria.
Termos dos agendadores
- OnCalendar=
- A chave que indica a hora num temporizador do systemd. **Dia da semana, data e hora cabem numa só linha.**
- Expressão cron
- A sintaxe que exprime uma hora mediante cinco campos: minuto, hora, dia do mês, mês e dia da semana. **Não sabe indicar segundos.**
- Atalho com nome
- Um apelido dado a um intervalo corrente, como `daily`, `weekly` ou `monthly`.
- Diferença de semântica
- **Quando são dados ao mesmo tempo dia do mês e dia da semana, o systemd os lê como conjunção e o cron como disjunção.**
- Persistent=
- O ajuste que recupera as execuções perdidas enquanto o sistema esteve desligado. **O cron não tem contrapartida direta.**
- Crontab
- O arquivo em que se escreve o agendamento do cron, ou o comando que o edita.
Perguntas frequentes
Curiosidade — O que significa devolver um temporizador systemd para cron
Migrações tecnológicas costumam ser vistas como algo unidirecional — passar de um mecanismo antigo para um mais novo —, mas na prática a conversão reversa também aparece bastante. Mover uma carga de trabalho de um host baseado em systemd para um contêiner leve que só suporta cron, ou para uma ferramenta de orquestração que usa sintaxe de agendamento estilo cron (como o Kubernetes CronJob), significa converter a sintaxe OnCalendar de volta para uma expressão cron.
Essa "conversão reversa" não é um simples mapeamento um-para-um, porque a sintaxe OnCalendar do systemd é mais expressiva que o cron. Ela suporta conceitos que os cinco campos do cron simplesmente não conseguem representar — restrições em nível de ano, precisão de segundos e uma combinação do tipo AND entre data e dia da semana. Por isso esta ferramenta busca converter com precisão os padrões de uso comum, tratando qualquer coisa mais complexa como um erro de conversão em vez de tentar uma aproximação.
A diferença semântica quando tanto o dia do mês quanto o dia da semana são especificados — lógica AND no systemd versus lógica OR no cron — é a maior armadilha dessa conversão reversa. Uma condição como "o dia 1 do mês" E "segunda-feira" restringe o systemd apenas aos dias que são ao mesmo tempo o dia 1 e uma segunda-feira, mas o cron executaria em qualquer dia que seja o dia 1 ou uma segunda-feira. Esta ferramenta avisa isso explicitamente para que essa mudança de significado, fácil de passar despercebida, não escape durante uma migração.