piapia123
es

Temporizador systemd: análisis de OnCalendar y generación de unidades

Web

Todo se ejecuta en tu navegador: no se sube nada

Entrada
Arrastra un archivo aquí para cargarlo
Resultado

`OnCalendar=` se parece a cron pero no se comporta igual, y las diferencias se esconden en los detalles. `a/b` es un paso (`*:0/15` son los minutos 0, 15, 30 y 45 de cada hora), `~N` cuenta hacia atrás desde el final del mes, y los días de la semana y los meses se pueden escribir con nombre. La que más despista: cuando se dan a la vez un día de la semana y una fecha, la coincidencia es un Y, no un O, justo al revés que en cron. Esta herramienta calcula las próximas ejecuciones en la zona horaria que elijas (mostrando tanto la hora local como UTC), explica la expresión segmento a segmento y genera un .timer y un .service a juego. El análisis y la aritmética ocurren por completo en tu navegador, usando las capacidades de fecha de la plataforma para lo de la zona horaria. No se envía nada a ningún sitio.

Funciones

  • Reconoce *, rangos a..b, pasos a/b, días y meses con nombre, y ~ (hacia atrás desde el final del mes)
  • Calcula las próximas 1–20 ejecuciones en la zona horaria elegida
  • Muestra cada ejecución como hora local con su desfase y como UTC
  • Explica qué significa cada segmento de día de la semana, fecha y hora
  • Genera un par .timer y .service a juego
  • Acepta tanto un archivo .timer pegado entero como una expresión suelta
  • Señala la diferencia entre el Y y el O de systemd y cron
  • Todo se calcula localmente, sin peticiones de red

Cómo se usa

  1. Escribe un valor de OnCalendar, o pega un archivo .timer entero
  2. Elige una zona horaria y cuántas ejecuciones listar
  3. Lee las próximas ejecuciones y la explicación segmento a segmento
  4. Copia el .timer y el .service generados

Preguntas frecuentes

¿En qué se diferencia OnCalendar de cron?
En dos cosas clave. Primero, cuando se fijan a la vez un día de la semana y una fecha, cron usa un O y systemd usa un Y: `0 9 * * 1` en cron es todos los lunes a las 09:00, mientras que `Mon *-*-01 09:00` en systemd es «un lunes que además es día 1», algo que solo ocurre unas pocas veces al año. Segundo, systemd permite escribir varias líneas `OnCalendar=` para disparar una misma unidad (eso es su O) y acepta días y meses con nombre, lo que se lee mucho mejor.
¿Qué significa *:0/15?
Significa los minutos 0, 15, 30 y 45 de cada hora. Lee `0/15` como «empieza en 0, avanza de 15 en 15, hasta el máximo del campo» (59 para los minutos), lo que da 0, 15, 30 y 45. Leer `0/15` como «de 0 a 0» deja solo el 0: sin error, pero completamente equivocado.
¿Por qué la zona horaria cambia el resultado?
Porque `OnCalendar=` se evalúa en hora local. El mismo `*-*-* 03:00:00` es 03:00 UTC en una máquina en UTC y 19:00 UTC (del día anterior) en una máquina en Shanghái. Por eso esta herramienta obliga a hacer explícita la zona y muestra tanto la hora local como UTC: comprueba la zona de una máquina antes de mover a ella un archivo de unidad.
¿Qué significa `~`?
Es un día contado hacia atrás desde el final del mes. `*-*-~1` es el último día de cada mes y `*-02-~03` es el antepenúltimo día de febrero, y sigue automáticamente la longitud del mes (en un año bisiesto febrero tiene 29 días, así que el antepenúltimo es el 27). Eso es mucho más fiable que escribir un 28 fijo.
¿Por qué un .timer necesita un .service?
Porque en systemd el timer solo decide cuándo dispararse; lo que hay que ejecutar se define en el service. Normalmente comparten nombre (`backup.timer` dispara `backup.service`), y `Unit=` puede apuntar a otro distinto. Esta herramienta genera un esqueleto funcional para ambos: querrás sustituir `ExecStart=` por tu propio comando.

Herramientas relacionadas