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.
Dicas de uso
- 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.
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.