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.
Consejos de uso
- 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.
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.