Configurar temporizadores systemd para tareas recurrentes
En este paso, aprenderá sobre los temporizadores systemd, que son una alternativa moderna a cron para programar tareas en sistemas Linux. Los temporizadores systemd ofrecen más flexibilidad y una mejor integración con el ecosistema systemd. Si bien los comandos systemctl se utilizan típicamente para gestionar las unidades systemd, debido al entorno del contenedor Docker, nos centraremos en crear y verificar los archivos de unidad de temporizador y servicio directamente.
Los temporizadores systemd funcionan en conjunto con las unidades de servicio systemd. Una unidad de temporizador (archivo .timer) define cuándo debe ejecutarse una tarea, y una unidad de servicio (archivo .service) define qué tarea debe ejecutarse.
Continuaremos trabajando en el sistema local para explorar la configuración de los temporizadores systemd.
Necesitará privilegios de root para crear archivos de unidad systemd en directorios del sistema. Dado que el usuario labex tiene acceso sudo, podemos usar sudo para los comandos requeridos.
Creemos un servicio simple que registre un mensaje en un archivo. Colocaremos este archivo de unidad de servicio en /etc/systemd/system/, que es donde se almacenan típicamente las unidades de servicio personalizadas.
Cree el archivo de unidad de servicio /etc/systemd/system/my-custom-task.service:
sudo nano /etc/systemd/system/my-custom-task.service
Agregue el siguiente contenido al archivo:
[Unit]
Description=My Custom Scheduled Task
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'echo "My custom task executed at $(date)" >> /var/log/my-custom-task.log'
Guarde y salga del editor (Ctrl+o, Enter, Ctrl+x en nano).
A continuación, cree el archivo de unidad de temporizador /etc/systemd/system/my-custom-task.timer. Este temporizador activará nuestro servicio cada 5 minutos.
sudo nano /etc/systemd/system/my-custom-task.timer
Agregue el siguiente contenido al archivo:
[Unit]
Description=Run My Custom Scheduled Task every 5 minutes
[Timer]
OnCalendar=*:0/5
Persistent=true
[Install]
WantedBy=timers.target
Guarde y salga del editor.
Explicación de OnCalendar:
*:0/5 significa "cada 5 minutos".
* para año, mes, día, hora (cualquier valor).
0/5 para minuto, lo que significa comenzando en el minuto 0, cada 5 minutos (0, 5, 10, ..., 55).
En un entorno systemd típico, ahora ejecutaría systemctl daemon-reload para que systemd esté al tanto de los nuevos archivos de unidad, y luego systemctl enable --now my-custom-task.timer para iniciar el temporizador. Sin embargo, debido a las limitaciones del contenedor Docker, systemctl no es completamente funcional.
En cambio, verificaremos manualmente la creación de los archivos. El demonio systemd dentro del contenedor podría recoger estos archivos eventualmente, pero no podemos controlar ni observar directamente la ejecución de su temporizador en esta configuración de laboratorio. El objetivo principal aquí es comprender cómo configurar estos archivos.
Verifiquemos la existencia de los archivos creados:
ls -l /etc/systemd/system/my-custom-task.service
ls -l /etc/systemd/system/my-custom-task.timer
Debería ver la salida que indica que ambos archivos existen.
Para simular la ejecución del servicio, puede ejecutar manualmente el comando definido en ExecStart:
sudo /bin/bash -c 'echo "My custom task executed at $(date)" >> /var/log/my-custom-task.log'
Ahora, verifique el archivo de registro para ver la salida:
sudo cat /var/log/my-custom-task.log
Debería ver el mensaje que acaba de registrar:
My custom task executed at Tue Jun 10 06:54:40 UTC 2025
Esto completa el paso de configuración del temporizador systemd. Los archivos de unidad de servicio y temporizador permanecerán en su lugar como referencia.