systemd incluye desde hace años su propio mecanismo de tareas programadas — los timers — como alternativa nativa a cron. No es obligatorio migrar lo que ya funciona, pero para servicios nuevos en una máquina que ya usa systemd, un timer da algo que cron no tiene de serie: recuperación automática de la ejecución perdida si la máquina estaba apagada.
Cómo sustituir cron por timers de systemd, paso a paso
- 1
Paso 1: Crear el servicio
Un timer siempre acompaña a un .service que define QUÉ se ejecuta. Crea
/etc/systemd/system/backup-homelab.service:[Unit] Description=Backup diario del homelab [Service] Type=oneshot ExecStart=/usr/local/bin/backup-homelab.sh
- 2
Paso 2: Crear el timer
Crea
/etc/systemd/system/backup-homelab.timeren el mismo directorio, con el mismo nombre base:[Unit] Description=Ejecuta backup-homelab.service cada dia a las 03:00 [Timer] OnCalendar=*-*-* 03:00:00 Persistent=true [Install] WantedBy=timers.target
- 3
Paso 3: Qué hace Persistent=true
Con Persistent=true, si la máquina estaba apagada a las 03:00, systemd ejecuta el job pendiente en cuanto arranca — algo que cron no hace por sí solo (necesitaría anacron aparte). Para tareas que no pueden saltarse un día, esta única línea ya justifica el cambio.
- 4
Paso 4: Habilitar y arrancar el timer
El timer se habilita como cualquier unidad de systemd — se activa el .timer, no el .service directamente:
sudo systemctl daemon-reload sudo systemctl enable --now backup-homelab.timer
- 5
Paso 5: Comprobar cuándo se ejecutará
Lista todos los timers activos y su próxima ejecución:
systemctl list-timers
- 6
Paso 6: Revisar los logs de una ejecución
Cada ejecución del .service queda registrada en el journal, identificada por su nombre:
journalctl -u backup-homelab.service --since today
Conclusión
OnCalendar admite expresiones más flexibles que el cron clásico (por ejemplo Mon..Fri 09:00, o eventos relativos con OnUnitActiveSec). Para una única tarea puntual no merece la pena migrar un cron que ya funciona, pero para servicios nuevos en una máquina con systemd, el timer es hoy la opción por defecto razonable.



