Conversor de Cron para systemd · Agendamento
Migre uma linha de crontab para um temporizador do systemd.
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.
Ambiente de testes do Conversor de Cron para systemd
Tip: press Esc to release focus.
—
Paste a crontab line, then convert to see the equivalent systemd
.timer and .service
units, plus any migration notes here.
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.
-
Analisa a linha.
Sua entrada de crontab é dividida nos cinco campos de tempo (ou um @macro) e no comando que vem a seguir.
-
Monta o OnCalendar.
Os campos de tempo são reescritos em uma expressão de calendário OnCalendar= do systemd, incluindo listas e passos.
-
Emite as unidades.
Um .timer que carrega o agendamento e um .service que envolve o seu comando são gerados como um par combinado.
-
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.
-
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
Uma linha de entrada, duas unidades de saída.
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.
# 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.
[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.
[Unit]
Description=backup.sh (migrated from crontab)
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh Instalar as unidades
Três comandos para entrar no ar.
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.
# 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
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.
FAQ
Suas perguntas, respondidas.
Toque em uma pergunta para expandir a resposta.
O que o Conversor de Cron para systemd faz?
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.
O meu crontab ou o meu comando saem em algum momento do meu 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.
Como um agendamento de cron é mapeado para OnCalendar=?
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”.
Por que migrar do cron para um temporizador do systemd, afinal?
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.
O que não pode ser traduzido um para um?
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.
Esta é uma ferramenta oficial do systemd ou do cron?
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.
Qual é o equivalente no systemd dos atalhos de cron @reboot, @daily e @hourly?
@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.
Como faço um temporizador do systemd executar um trabalho perdido depois que o sistema ficou desligado, como o anacron?
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 sempre inclui Persistent=true na unidade .timer gerada, então esse comportamento já vem ativado por padrão.
Para onde vão os arquivos .timer e .service gerados, e como eu os habilito?
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.
Como verifico ou testo uma expressão OnCalendar do systemd depois de converter a partir do cron?
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.
29 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, 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.