Uso de temporizadores Systemd como reemplazo de trabajos Cron

Uso de temporizadores Systemd como reemplazo de trabajos Cron
Una fotografía de una mujer sosteniendo un despertador mientras está frente a una computadora portátil.

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.

Una terminal que muestra un servicio del sistema utilizando un temporizador Systemd.

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 OnBootSecvariable que permite retrasar la unidad de servicio hasta que transcurra una determinada cantidad de tiempo después de un arranque exitoso.

Una terminal que muestra un ejemplo de configuración de temporizador con una variable de activación especial.

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 AccuracySecvariable. 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.

Una terminal que muestra la salida del comando systemctl en una distribución de Linux basada en Systemd.

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 --allbandera 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.

Una terminal que enumera todos los temporizadores Systemd en ejecución en la sesión actual.

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 OnCalendarvariable 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.

Una terminal que resalta el valor del temporizador personalizado para la variable OnCalendar.

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.

Una terminal que resalta la ubicación del

Elimine las variables OnCalendary Persistent, luego agregue OnBootSecseguido 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.

Una terminal que resalta la variable OnBootSec que reemplaza las variables de tiempo originales del archivo del temporizador personalizado.

Agrega la OnUnitActiveSecvariable que se encuentra justo debajo OnBootSecy 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.

Una terminal que resalta la variable OnUnitActiveSec que convierte el temporizador de ejecución única en un temporizador monótono.

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-calendarvariable 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-booty --on-unit-active:

Confirme que su temporizador temporal ahora está en cola en el programador de trabajos de Systemd ejecutando el siguiente comando:

Una terminal que muestra el estado de un temporizador transitorio cargado en el sistema.

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.timeren 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.

Una terminal que muestra el archivo del temporizador que se ejecuta en el sistema actual.

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

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *