bitlvl
ES

Conversor cron ⇄ temporizador systemd

Pega una línea de crontab completa, planificación y comando, y obtén los dos archivos de unidad más los comandos de instalación. O pega una línea OnCalendar para obtener el equivalente cron.

Unidad timer

 

Unidad service

 

Instalar

 

A la inversa: OnCalendar → cron

Los resultados y mensajes de esta herramienta se muestran en inglés.

Cron frente a temporizadores systemd

crontemporizador systemd
DefiniciónUna línea en un crontabDos archivos: .timer (cuándo) y .service (qué)
Ejecuciones perdidasSe pierden (salvo con anacron)Persistent=true las ejecuta en el siguiente arranque
EntornoPATH mínimo, sin perfil; salida por correoDefinido en la unidad; salida al journal
SolapamientoSe vuelve a ejecutar aunque la anterior siga en marchaNunca se solapa: un temporizador espera a que termine su servicio
DependenciasNingunaAfter=network-online.target, montajes, otras unidades
Límites de recursos, sandboxingNoTodo lo de systemd: MemoryMax, CPUQuota, ProtectSystem…
Inspeccióncrontab -l, grep en el syslogsystemctl list-timers, journalctl -u, systemctl status
SimplicidadUna líneaVeinte líneas

Para una línea en una máquina personal, cron está bien. Para cualquier cosa en un servidor que no deba solaparse, deba recuperarse tras una caída, necesite límites o cuyos registros alguien leerá después, un temporizador es la mejor herramienta, y el conversor escribe el código repetitivo.

Qué hace el conversor con el comando

ExecStart= toma una ruta absoluta y argumentos, no una línea de shell. Las redirecciones (>> log 2>&1) se eliminan porque el journal captura la salida; las tuberías y && se envuelven en /bin/sh -c '…'. La regla de cron de que % significa salto de línea no se aplica, así que date +%F funciona tal cual. Las variables de entorno fijadas en el crontab pasan a líneas Environment=.

Día del mes y día de la semana

Si una línea cron restringe ambos, cron se dispara cuando coincide cualquiera; systemd exige ambos. El conversor avisa, ya que esa planificación necesita dos temporizadores para reproducirse.

Preguntas

¿Dónde van los archivos?

/etc/systemd/system/ para unidades de sistema, ~/.config/systemd/user/ para unidades de usuario (luego usa systemctl --user y loginctl enable-linger). Ejecuta systemctl daemon-reload tras añadir o editar.

¿Cómo veo cuándo se ejecutará la próxima vez?

systemctl list-timers --all muestra la próxima y la última ejecución de cada temporizador. systemd-analyze calendar "expr" muestra la próxima ejecución de cualquier expresión OnCalendar.

¿Cómo lo ejecuto ahora, sin esperar?

systemctl start nombre.service (no el temporizador). El temporizador mantiene su propia planificación.

¿Puede un temporizador ejecutarse cada 10 segundos?

Sí, con OnCalendar=*:*:0/10 y AccuracySec=1s, o con OnUnitActiveSec=10s para «10 segundos después de que terminara la última ejecución». Cron no puede bajar de un minuto.