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
- Introduzca el valor de OnCalendar= Sirve una forma como `Mon *-*-* 06:00:00`, y también un nombre como `daily`.
- Revise la expresión cron generada Se le entrega el resultado trasladado a los cinco campos.
- Lea las advertencias **Se señalan tanto las especificaciones que cron no sabe expresar como las diferencias de semántica.**
- 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
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.