Los temporizadores de systemd no reciben el cariño que merecen

Fuentes: You Don't Love systemd Timers Enough
Imagen generada por IA con el prompt: Stylized 24-hour clock face intertwined with mechanical gears and soft circuit traces, deep blue background, editorial technical illustration, minimalist, no text or logos.
Imagen generada con IA

Los temporizadores de systemd constituyen una alternativa moderna y robusta al venerable cron para programar tareas en sistemas Linux. Aunque las tareas programadas mediante cron siguen siendo omnipresentes, arrastran limitaciones heredadas de décadas: rutas de ejecución ambiguas, salidas estándar y de error difíciles de rastrear, historiales de ejecución complicados de interrogar y una gramática de planificación críptica que resulta difícil de leer para cualquier persona que no la haya memorizado.

Un temporizador de systemd es un tipo de unidad que activa otras unidades —normalmente un servicio— siguiendo una programación determinada. El artículo propone un ejemplo práctico: un servicio llamado "roulette" que, con una probabilidad de una entre diez, apaga el equipo. La unidad de servicio se ubica en /etc/systemd/system/roulette.service con directivas como ExecStart, mientras que el temporizador asociado, roulette.timer, define cuándo debe ejecutarse mediante la opción OnCalendar=10:00.

Para quienes prefieran evitar la lógica condicional dentro de ExecStart, systemd ofrece ExecCondition, una opción nativa más limpia para expresar "¿debo continuar ejecutándome?". El autor también subraya buenas prácticas: tratar la ruta absoluta de ExecStart como un intérprete con su argumento en lugar de un comando de shell, recordar que el entorno no hereda variables por defecto y apoyarse en las opciones nativas de systemd en lugar de improvisar scripts propios.

Una vez colocado el archivo .timer junto al .service, basta con ejecutar systemctl start roulette.timer y, si se desea persistencia, systemctl enable roulette.timer. El subcomando systemctl status sobre el temporizador muestra cuándo se producirá la próxima activación, una mejora sustancial frente a las herramientas tradicionales.

La pieza aborda también la sintaxis temporal de systemd, que distingue entre intervalos de tiempo repetitivos y eventos de calendario, y recomienda la página de manual systemd.time(7) como referencia principal junto a la herramienta de línea de comandos systemd-analyze, capaz de validar y explicar expresiones temporales de forma interactiva, e incluso de desambiguar expresiones cron clásicas con sus horarios previstos.