Convertidor de temporizador systemd a expresión Cron

Convierte la sintaxis OnCalendar= de un temporizador systemd a una expresión cron (minuto hora día mes día de la semana) gratis. El inverso de nuestro convertidor "Cron a temporizador systemd". Admite atajos con nombre (daily, weekly, etc.) y avisa de diferencias semánticas cuando se especifican a la vez día del mes y día de la semana.

Correspondencia entre componentes de systemd y campos de cron

Cada parte de la sintaxis OnCalendar= de systemd corresponde a uno de los cinco campos de cron de la siguiente manera.

Posición Dónde aparece en systemd Campo de cron
1 Minuto en la parte de hora (MM en HH:MM:SS) Minuto
2 Hora en la parte de hora (HH en HH:MM:SS) Hora
3 Día en la parte de fecha (día en año-mes-día) Día del mes
4 Mes en la parte de fecha (mes en año-mes-día) Mes
5 Prefijo de día de la semana (p. ej. Mon, Mon..Fri) Día de la semana

El campo de segundos de systemd (SS en HH:MM:SS) no tiene equivalente en cron, así que se ignora durante la conversión (aparece un aviso si los segundos no son "00").

Correspondencia entre abreviaturas de día de systemd y números de día de la semana de cron

systemd usa abreviaturas en inglés para los días de la semana, mientras que cron usa números del 0 al 6.

Abreviatura de día de systemd Número de día de la semana en cron
Sun 0
Mon 1
Tue 2
Wed 3
Thu 4
Fri 5
Sat 6

Correspondencia entre atajos con nombre de systemd y expresiones cron

systemd tiene atajos con nombre legibles como "daily" y "weekly", y esta herramienta también puede convertirlos a expresiones cron.

OnCalendar= Expresión cron
minutely * * * * *
hourly 0 * * * *
daily / midnight 0 0 * * *
weekly 0 0 * * 1
monthly 0 0 1 * *
yearly / annually 0 0 1 1 *

Ejemplos de conversión comunes

OnCalendar= Expresión cron Significado
*-*-* *:*:00 * * * * * Se ejecuta cada minuto (equivalente a "* * * * *" en cron).
*:00/15:00 */15 * * * * Se ejecuta cada 15 minutos.
Mon..Fri 09:00:00 0 9 * * 1-5 Se ejecuta a las 9:00 los días laborables (de lunes a viernes).
*-*-01 00:00:00 0 0 1 * * Se ejecuta a medianoche el día 1 de cada mes.
*-01-01 00:00:00 0 0 1 1 * Se ejecuta a medianoche el 1 de enero de cada año.
Mon *-*-01 00:00:00 0 0 1 * 1 Un ejemplo que especifica tanto un día del mes (el 1) como un día de la semana (lunes). systemd lo trata como una condición AND (solo se ejecuta cuando ambos coinciden), pero cron lo interpreta como una condición OR (se ejecuta cuando coincide cualquiera de los dos) — así que el resultado convertido se ejecuta con más frecuencia de lo previsto en la expresión OnCalendar original.

Una expresión OnCalendar que restringe tanto el día del mes como el día de la semana a algo distinto de "*" no puede convertirse con precisión a cron (systemd usa lógica AND, cron usa lógica OR). Verifica siempre el significado del resultado de la conversión en casos como este.

Devolver un temporizador de systemd a una expresión cron

Esta herramienta convierte el `OnCalendar=` de un temporizador de systemd de vuelta a una expresión cron de minuto, hora, día del mes, mes y día de la semana. También atiende los atajos con nombre, como `daily` y `weekly`. Es el reverso de su herramienta compañera.

**Lo que merece cuidado en este sentido es que parte de lo que systemd sabe expresar no tiene equivalente en cron.** `OnCalendar=` admite **una especificación al segundo** y **rangos de fechas** como `*-*-01..07`, y ninguno de los dos cabe en los cinco campos de cron. Tampoco tiene cron contrapartida alguna para `Persistent=`, que recupera las ejecuciones perdidas mientras el sistema estuvo apagado. **El otro punto es la semántica del día del mes y el día de la semana: systemd trata los dos como conjunción, mientras que cron los lee como disyunción.** Un traslado directo desplaza, pues, la programación hacia ejecutarse más a menudo, y la herramienta le advierte allí donde eso aplique.

Cómo convertir

  1. Introduzca el valor de OnCalendar= Sirve una forma como `Mon *-*-* 06:00:00`, y también un nombre como `daily`.
  2. Revise la expresión cron generada Se le entrega el resultado trasladado a los cinco campos.
  3. Lea las advertencias **Se señalan tanto las especificaciones que cron no sabe expresar como las diferencias de semántica.**
  4. Transcríbala a un crontab Añada después el comando a ejecutar y la línea queda lista para registrar.

Consejos para aprovecharla mejor

  • Puedes escribir directamente atajos con nombre como "daily", "weekly" o "monthly" — se convierten internamente a la expresión cron equivalente (por ejemplo, "daily" se convierte en "0 0 * * *").
  • Restringir tanto el día del mes como el día de la semana a algo distinto de "*" cambia el significado al convertir la lógica AND de systemd en la lógica OR de cron. Comprueba el aviso en ese caso y confirma que el resultado coincide con tu intención.
  • Los campos de año y segundos de OnCalendar no tienen equivalente en cron, así que se descartan durante la conversión (un aviso te lo notifica cuando ocurre).
  • Útil al migrar cargas de trabajo fuera de systemd — por ejemplo, al mover una tarea programada a un Kubernetes CronJob (que usa sintaxis de estilo cron).
  • Para programaciones simples que no combinan restricciones de día de la semana y fecha (cada hora, cada día, cada semana, etc.), esta conversión siempre es exacta.

Cuándo resulta útil

Trasladarse a un entorno sin systemd

**Los contenedores y los sistemas tipo UNIX más antiguos a veces no ofrecen más que cron.**

Descifrar un temporizador existente

Aun sin soltura con la sintaxis de `OnCalendar=`, pasarla a expresión cron deja clara la frecuencia.

Mantener la misma programación en dos entornos

**Donde producción corre systemd y desarrollo cron, ambas configuraciones pueden cotejarse.**

Hacer inventario de sus programaciones

Convertirlas todas a la vez le da ocasión de comprobar que los intervalos son los que quería.

Términos de los programadores

OnCalendar=
La clave que indica la hora en un temporizador de systemd. **Día de la semana, fecha y hora caben en una sola línea.**
Expresión cron
La sintaxis que expresa una hora mediante cinco campos: minuto, hora, día del mes, mes y día de la semana. **No sabe indicar segundos.**
Atajo con nombre
Un alias dado a un intervalo corriente, como `daily`, `weekly` o `monthly`.
Diferencia de semántica
**Cuando se dan a la vez día del mes y día de la semana, systemd los lee como conjunción y cron como disyunción.**
Persistent=
El ajuste que recupera las ejecuciones perdidas mientras el sistema estuvo apagado. **Cron no tiene contrapartida directa.**
Crontab
El archivo en que se escribe la programación de cron, o el comando que lo edita.

Preguntas frecuentes

Esto surge al migrar a un contenedor Docker ligero que no tiene systemd, al reproducir la misma programación en un Kubernetes CronJob (que usa sintaxis de estilo cron), o cuando las herramientas de tu equipo solo admiten configuración en formato cron.

Sí. Escribir atajos con nombre de systemd como "minutely", "hourly", "daily", "weekly", "monthly" o "yearly" directamente los convierte a la expresión cron equivalente.

En la sintaxis OnCalendar de systemd, una restricción de día de la semana y una restricción de fecha siempre se combinan con lógica AND (ambas deben coincidir). Sin embargo, según la semántica clásica de Vixie cron, restringir tanto el día del mes como el día de la semana a algo distinto de "*" las convierte en una condición OR (basta con que coincida una de las dos). Esta herramienta detecta ese caso y muestra un aviso de que el resultado convertido puede ser más amplio (ejecutarse con más frecuencia) que la expresión OnCalendar original.

Las expresiones cron no tienen campo para el año, así que cualquier restricción de año en una expresión OnCalendar (cualquier valor distinto de "*") se ignora durante la conversión. Esta herramienta muestra un aviso en ese caso, señalando que el resultado convertido se ejecuta todos los años, independientemente del año que especificaste.

La herramienta cubre los patrones principales que genera nuestra herramienta "Cron a temporizador systemd" (por minuto, cada hora, diario, semanal, mensual, anual, pasos, rangos, listas, restricciones de día de la semana y atajos con nombre). Sin embargo, como la sintaxis OnCalendar es más expresiva que cron, especificaciones muy complejas — varios años, repeticiones de precisión de segundos — no se pueden representar con exactitud en cron y pueden fallar al convertirse.
Tool-kun

A propósito — Qué significa devolver un temporizador systemd a cron

Las migraciones tecnológicas suelen plantearse como algo unidireccional — pasar de un mecanismo antiguo a uno más nuevo —, pero en la práctica la conversión inversa también aparece con frecuencia. Mover una carga de trabajo de un host basado en systemd a un contenedor ligero que solo admite cron, o a una herramienta de orquestación que usa sintaxis de programación estilo cron (como Kubernetes CronJob), implica convertir la sintaxis OnCalendar de vuelta a una expresión cron.

Esta "conversión inversa" no es una simple correspondencia uno a uno, porque la sintaxis OnCalendar de systemd es más expresiva que cron. Admite conceptos que los cinco campos de cron simplemente no pueden representar — restricciones a nivel de año, precisión de segundos y una combinación de tipo AND entre fecha y día de la semana. Por eso esta herramienta busca convertir con precisión los patrones de uso común, y trata cualquier cosa más compleja como un error de conversión en lugar de intentar una aproximación.

La diferencia semántica cuando se especifican tanto el día del mes como el día de la semana — lógica AND en systemd frente a lógica OR en cron — es la mayor trampa de esta conversión inversa. Una condición como "el día 1 del mes" Y "lunes" limita systemd solo a los días que son a la vez el día 1 y lunes, pero cron se ejecutaría en cualquier día que sea el día 1 o lunes. Esta herramienta lo advierte explícitamente para que este cambio de significado, fácil de pasar por alto, no se escape durante una migración.