Pular para o conteúdo

Cron to systemd Converter: Migre uma linha de crontab para um temporizador do systemd.

Roda no seu navegador — nada do que você cola sai desta página. Como comprovamos isso

Ambiente de testes do Conversor de Cron para systemd

Examples
Base name for the generated .timer and .service units. Optional.
crontab
0 3 * * * /usr/bin/backup.sh

Results update as you type — press ⌘/Ctrl + Enter to run now. Press Esc to release the editor.

fig. 05 — cron-to-systemd · scheduling 1 note
Result
OnCalendar *-*-* 03:00:00

Migration note

  • Command parsed from the cron line and placed in ExecStart.
cron-job.timer
[Unit]
Description=cron-job (converted from crontab)

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
Unit=cron-job.service

[Install]
WantedBy=timers.target
cron-job.service
[Unit]
Description=cron-job (converted from crontab)

[Service]
Type=oneshot
ExecStart=/usr/bin/backup.sh

Cole uma única entrada de crontab para gerar um par systemd .timer e .service com uma expressão OnCalendar= e notas de migração — grátis, online, sem cadastro.

A lacuna

systemd é o novo crontab.

As distribuições Linux modernas agendam trabalhos com temporizadores do systemd, e muitas já nem sequer incluem um daemon de cron por usuário. Os temporizadores oferecem registro no journald, ordenação de dependências, limites de recursos, repetições e Persistent=true para as execuções perdidas — coisas que uma simples linha de crontab não consegue expressar.

Mas a sintaxe não é familiar, e reescrever um agendamento à mão em OnCalendar= em dois arquivos de unidade é trabalhoso e fácil de errar sutilmente. Este conversor faz a parte mecânica para você — cole uma linha de crontab para migrá-la para unidades de temporizador do systemd em segundos — e aponta o punhado de comportamentos — ambiente, MAILTO, diretório de trabalho — que não se traduzem um para um, de modo que a migração seja honesta em vez de silenciosa.

Precisa ler primeiro o lado do cron? Experimente o Testador de expressões Cron, depois converta-a aqui — ou vá direto ao ambiente de testes ao vivo acima.

O processo

Como funciona.

Cinco passos determinísticos transformam uma linha de crontab em um par de unidades instaláveis — tudo dentro da aba do seu navegador, sempre.

  1. Analisa a linha.

    Sua entrada de crontab é dividida nos cinco campos de tempo (ou um @macro) e no comando que vem a seguir.

  2. Monta o OnCalendar.

    Os campos de tempo são reescritos em uma expressão de calendário OnCalendar= do systemd, incluindo listas e passos.

  3. Emite as unidades.

    Um .timer que carrega o agendamento e um .service que envolve o seu comando são gerados como um par combinado.

  4. Sinaliza as lacunas.

    Qualquer coisa que o cron faça e que o systemd trate de forma diferente — ambiente, MAILTO, diretório de trabalho — aparece como uma nota.

  5. Copia e instala.

    Coloque as duas unidades no lugar, depois habilite e inicie o temporizador. As próximas execuções aparecem no list-timers.

O mapeamento

Como uma linha de crontab vira um OnCalendar.

O conversor lê uma entrada padrão de crontab — cinco campos de tempo mais um comando, ou um @macro — e emite um systemd .timer emparelhado com um .service.

A linha de crontab

Os cinco campos são minute, hour, day-of-month, month e day-of-week, seguidos do comando. Listas (1,15), intervalos (1-5), passos (*/10) e @macros são todos compreendidos.

crontab
# Run the nightly backup every day at 03:00
0 3 * * *  /usr/local/bin/backup.sh

A unidade .timer

Carrega o agendamento como uma expressão OnCalendar=. Persistent=true significa que uma execução perdida enquanto a máquina estava desligada é disparada na próxima inicialização — mais próximo de como os operadores esperam que um trabalho de backup se comporte.

backup.timer
[Unit]
Description=Run backup.sh (migrated from crontab)

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true

[Install]
WantedBy=timers.target

A unidade .service

Envolve o seu comando. Type=oneshot encaixa em um trabalho que executa até concluir, e ExecStart= contém o comando da linha de crontab. Adicione Environment= ou User= aqui conforme precisar.

backup.service
[Unit]
Description=backup.sh (migrated from crontab)

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh

Instalar as unidades

Instale e habilite o temporizador em três comandos.

Copie ambas as unidades, coloque-as em /etc/systemd/system/, recarregue o daemon, depois habilite e inicie o .timer — nunca o serviço diretamente. O temporizador é o que agenda a execução.

Uma vez habilitado, systemctl list-timers mostra o próximo horário de disparo, e journalctl -u backup.service acompanha a saída que o antigo MAILTO teria enviado para você por e-mail.

install.sh
# Drop the units in place, then enable the timer
$ sudo cp backup.timer backup.service /etc/systemd/system/
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now backup.timer

# Confirm the next scheduled run
$ systemctl list-timers backup.timer

Antes de fazer a virada

O que o cron faz e um temporizador do systemd não.

Uma nota sobre paridade: as unidades geradas cobrem o caso comum — agendamento, comando e tratamento de execuções perdidas. Alguns comportamentos do cron não têm um equivalente direto em OnCalendar= e aparecem como notas de migração no lugar: as atribuições de ambiente por linha (mova-as para Environment= / EnvironmentFile=), o envio de e-mail da saída via MAILTO (use o journald ou um manipulador OnFailure=) e o diretório de trabalho implícito (defina WorkingDirectory=). Revise as notas, depois execute o temporizador uma vez com systemctl start para confirmar antes de remover a linha de crontab original.

Uma diferença passa fácil despercebida: quando uma linha restringe ao mesmo tempo day-of-month e day-of-week, o cron dispara se qualquer um dos dois casar, enquanto o OnCalendar= exige os dois. O conversor sinaliza essa linha nas notas — reproduzir o comportamento do cron exige dois temporizadores.

FAQ

Suas perguntas, respondidas.

Toque em uma pergunta para expandir a resposta.

Ele pega uma única linha de crontab — os cinco campos de tempo mais o comando — e gera uma configuração equivalente no systemd: uma unidade .timer com uma expressão OnCalendar= que corresponde ao seu agendamento, e uma unidade .service que executa o seu comando. Ele também lista notas de migração que apontam qualquer coisa que o systemd trata de forma diferente, como o diretório de trabalho implícito ou o ambiente. Tudo é calculado no seu navegador.

Não. O conversor roda 100% no lado do cliente. Sua linha de cron e seu comando são analisados e traduzidos na aba do seu navegador: nada é enviado para um servidor, e não há conta nem cadastro. É seguro colar comandos e caminhos internos.

Um conjunto de campos de crontab é reescrito na sintaxe de calendário OnCalendar= do systemd — por exemplo, “0 3 * * *” vira “*-*-* 03:00:00” (diariamente às 03:00). Listas, intervalos e valores de passo são mapeados para os seus equivalentes em OnCalendar, e os @macros comuns como @daily e @hourly são mapeados para as suas formas canônicas de temporizador. Depois de instalar o temporizador, você pode confirmar as próximas execuções com “systemctl list-timers”.

Os temporizadores oferecem registro estruturado através do journal (journalctl -u your.service), ordenação de dependências, limites de recursos, repetição automática e agendamento preciso versus monotônico, além de Persistent=true para que uma execução perdida possa ser disparada na próxima inicialização. Eles são a primitiva de agendamento nativa nas distribuições Linux modernas com systemd, onde muitas vezes o crond por usuário nem sequer está instalado.

Alguns comportamentos do cron não têm um equivalente direto em OnCalendar= e, em vez disso, aparecem como notas de migração — extensões de cron não padronizadas ou específicas do fornecedor, o envio de e-mail da saída via MAILTO (use o journald ou um manipulador OnFailure=) e as atribuições de ambiente por linha (mova-as para Environment= ou para um EnvironmentFile= no .service). O conversor sinaliza esses casos para que nada mude de significado silenciosamente.

Não. Este é um utilitário independente e comunitário, e não é afiliado nem endossado pelo projeto systemd ou por qualquer implementação de cron. Ele modela os formatos padrão de crontab e de unidades do systemd por familiaridade e os nomeia apenas para descrever o que converte.

@reboot não tem equivalente em OnCalendar= e é mapeado para OnBootSec=1min na seção [Timer], de modo que o trabalho é disparado uma vez logo após cada inicialização. @hourly se expande para OnCalendar=*-*-* *:00:00, @daily para OnCalendar=*-*-* 00:00:00, @weekly para OnCalendar=Sun *-*-* 00:00:00, @monthly para OnCalendar=*-*-01 00:00:00, e @yearly para OnCalendar=*-01-01 00:00:00. O conversor trata todos esses casos automaticamente e anota o caso especial do @reboot.

Adicione Persistent=true à seção [Timer] junto da sua linha OnCalendar=. O systemd registra em disco o horário do último disparo e, se o horário agendado passou enquanto a máquina estava desligada, executa o trabalho imediatamente na próxima inicialização. O conversor inclui Persistent=true em todo temporizador OnCalendar= que gera, então esse comportamento já vem ativado por padrão; um temporizador @reboot (OnBootSec=) não recebe essa opção, porque Persistent= não tem efeito nele.

Para trabalhos de todo o sistema, coloque ambas as unidades em /etc/systemd/system/, depois execute sudo systemctl daemon-reload e sudo systemctl enable --now yourjob.timer. Habilite a unidade .timer — não o .service diretamente —, já que o temporizador é o que controla o agendamento. Para trabalhos por usuário, coloque-as em ~/.config/systemd/user/ e use systemctl --user enable --now yourjob.timer no lugar.

Execute systemd-analyze calendar “<expression>” para validar a sintaxe e ver quando a expressão vai ocorrer da próxima vez — por exemplo, systemd-analyze calendar “*-*-* 03:00:00”. Depois que o temporizador estiver instalado, systemctl list-timers mostra cada temporizador ativo com seus horários de última e próxima execução, e journalctl -u yourjob.service transmite a saída do trabalho.

More free, private DevOps tools.

O Conversor de Cron para systemd é uma ferramenta dentro do OpsCanopy — uma copa crescente de validadores, conversores e testadores baseados no navegador que nunca tocam um servidor.

42 ferramentas gratuitas, todas capazes de funcionar offline — o opscanopy.com não exige cadastro e não envia nada.

Trabalha com agendamentos? Combine-o com o Testador de expressões Cron para ler uma linha de cron em linguagem simples primeiro, passe as unidades geradas aqui pelo Systemd Unit Validator para validar suas edições manuais, ou explore o diretório de ferramentas completo.

Não é afiliado nem endossado pelo projeto systemd ou por qualquer implementação de cron. Os nomes de formato são usados apenas para descrever o que esta ferramenta converte.