Uso de temporizadores Systemd como reemplazo de trabajos Cron
Como usuario de Linux, probablemente esté familiarizado con cron. Ha funcionado como el programador de tareas basado en tiempo de Unix durante muchos años. Ahora, muchos usuarios están utilizando temporizadores Systemd para reemplazar el dominio de cron. En este artículo, se analizarán los aspectos básicos de cómo configurar su propio temporizador Systemd y asegurarse de que se ejecute correctamente en su sistema.
¿Por qué utilizar temporizadores Systemd en lugar de Cron?
Uno de los puntos fuertes de Systemd Timers es que está totalmente integrado en el ecosistema Systemd. Esto significa que es muy fácil programar y vincular varias unidades de servicio de Systemd, lo que facilita la automatización de tareas en comparación con un demonio cron tradicional.
Otra ventaja de los temporizadores Systemd sobre Cron es que proporciona un control más detallado sobre cómo activar los trabajos programados. Por ejemplo, los temporizadores Systemd tienen una OnBootSec
variable que permite retrasar la unidad de servicio hasta que transcurra una determinada cantidad de tiempo después de un arranque exitoso.
Por último, los temporizadores Systemd también son increíblemente precisos en comparación con un demonio cron estándar. De forma predeterminada, puede rastrear y ejecutar trabajos hasta un microsegundo utilizando su AccuracySec
variable. Esto es increíblemente útil si está ejecutando una computadora que requiere tiempos exactos para sus tareas programadas.
Instalación de temporizadores Systemd
Los temporizadores son una función integrada de Systemd. Esto significa que si usa Systemd como su demonio de inicio, como es el caso de las distribuciones de Linux más populares, como Arch, Fedora y Ubuntu, su máquina ya está aprovechando esta función en algunos de sus procesos del sistema.
Para comprobar si tu distribución está ejecutando Systemd, puedes ejecutar el siguiente comando:
Al hacer esto se mostrarán todas las unidades, dispositivos y temporizadores Systemd que se están ejecutando actualmente en su sistema.
Lista de temporizadores existentes
La forma más sencilla de comprobar si hay un temporizador ejecutándose en su cuenta de usuario actual es con el siguiente comando:
También puedes usar la --all
bandera para comprobar cada temporizador del sistema, incluidos los inactivos:
Al hacer esto, se imprimirá la fecha y la hora en que se activará cada temporizador, la cuenta regresiva hasta ese punto, cuánto tiempo ha pasado desde la última vez que se ejecutó, el nombre de la unidad del temporizador en sí y el servicio que activa cada unidad del temporizador.
Creación de un nuevo servicio y temporizador
El primer paso para crear un temporizador Systemd es crear o encontrar un servicio existente al que adjuntarlo. Esto se debe a que cada temporizador debe estar adjunto a una unidad de servicio principal. Esta sección lo guiará a través del proceso de creación de un temporizador para un servicio Systemd personalizado.
Comience creando los archivos en blanco “.service” y “.timer” en su directorio de inicio:
Abra su nuevo archivo de servicio usando su editor de texto favorito:
Pegue la siguiente plantilla dentro de su nuevo archivo de servicio:
Guarde su archivo “.service” y luego abra su archivo “.timer” en blanco usando el mismo editor de texto:
Pegue el siguiente bloque de código dentro de su archivo de temporizador:
Vaya a la [Timer]
sección y luego reemplace el valor de la OnCalendar
variable con la fecha y la hora en que desea que se ejecute su unidad Systemd. En mi caso, quiero que mi programa se ejecute exactamente a las 11:43 a. m. todos los días.
Creando un temporizador monótono
Además de configurar un temporizador que se ejecute en una fecha específica, también es posible crear un temporizador monótono que se ejecute en relación con el tiempo de actividad actual de su computadora. Esto es útil si está programando una tarea en una máquina que no está en funcionamiento constantemente, como una computadora de escritorio o una computadora portátil.
Para comenzar, abra su archivo “.timer”, luego desplácese hacia abajo hasta la [Timer]
sección.
Elimine las variables OnCalendar
y Persistent
, luego agregue OnBootSec
seguido de un intervalo de tiempo para cuando desee ejecutar su archivo de unidad. Por ejemplo, si lo configura en «1 hora», le indicará a Systemd que inicie su comando una hora después de que su computadora se inicie correctamente.
Agrega la OnUnitActiveSec
variable que se encuentra justo debajo OnBootSec
y luego proporciona el intervalo en el que quieres que tu temporizador se ejecute continuamente después de que se inicie tu sistema. En mi caso, lo estableceré en «30 minutos», ya que quiero que mi tarea se ejecute cada 30 minutos después de su ejecución inicial.
Creación de un temporizador transitorio
Una de las ventajas de que Systemd Timer esté profundamente integrado en Systemd es que puede aprovechar otros programas adyacentes del demonio init. Por ejemplo, es posible usar temporizadores con Systemd-run para crear trabajos transitorios únicos en su máquina.
Para crear un temporizador temporal simple, pegue la siguiente línea de código en una sesión de terminal, luego reemplace el valor de la --on-calendar
variable con el intervalo en el que desea que se ejecute su comando:
Añade el comando que deseas ejecutar al final de la línea y luego presiona Enterpara programarlo.
También puedes crear temporizadores monótonos temporales utilizando las variables --on-boot
y --on-unit-active
:
Confirme que su temporizador temporal ahora está en cola en el programador de trabajos de Systemd ejecutando el siguiente comando:
Ejecución del temporizador Systemd
Para ejecutar el nuevo temporizador Systemd, debe asegurarse de que esté cargado correctamente en su sesión actual de Systemd. Para ello, copie tanto el servicio personalizado como el archivo del temporizador en el directorio de servicios de Systemd:
Recargue la configuración actual del demonio init:
Activa tanto el servicio como el temporizador que has creado usando systemctl
:
Comprueba si has cargado correctamente el nuevo temporizador ejecutando lo siguiente sudo systemctl status my-new-timer.timer
en una nueva sesión de terminal. En este caso, puedes ver que el temporizador ya está programado y preparado para que el sistema se ejecute.
Aprender a programar tareas con temporizadores Systemd es solo una parte de la comprensión de cómo funciona su máquina Linux. Profundice en los aspectos internos de este maravilloso sistema operativo consultando nuestro artículo comparativo sobre Grub y Systemd-boot.
Crédito de la imagen: Alexandr Podvalny vía Unsplash . Todas las modificaciones y capturas de pantalla son de Ramces Red.
Deja una respuesta