SDB:Systemd timers

Saltar a: navegaci贸n, buscar


Art铆culos recomendados Art铆culos relacionados
Icon-manual.png Icon-ayuda.png

Al igual que cron, las unidades de temporizador systemd proporcionan un mecanismo para programar trabajos en Linux. Aunque las unidades de temporizador systemd tienen el mismo prop贸sito que cron, ofrecen varias ventajas.

  • Los trabajos programados utilizando una unidad de temporizador pueden depender de otros servicios del sistema.
  • Las unidades de temporizador se tratan como servicios regulares de systemd, por lo que se pueden administrar con systemctl.
  • Los temporizadores pueden ser en tiempo real y monot贸nico.
  • Las unidades de tiempo se registran en el diario systemd, lo que facilita su seguimiento y soluci贸n de problemas.

Las unidades de temporizador systemd se identifican mediante la extensi贸n de nombre de fichero .timer.

Tipos de temporizadores

  • Temporizadores de tiempo real: parecidos a los trabajos cron (cronjobs), son causados por eventos de calendario. Se definen utilizando la opci贸n OnCalendar.
  • Monot贸nicos: se activan en un tiempo espec铆fico transcurrido desde un determinado punto de partida. Este 煤ltimo podr铆a ser un evento de arranque del sistema o de activaci贸n de la unidad del sistema. Hay varias opciones para definir temporizadores de este tipo, incluidos OnBootSec, OnUnitActiveSec y OnTypeSec. No son persistentes y se reinician despu茅s de cada reinicio.

Unidades de temporizadores y de servicios

Cada unidad de temporizador debe tener un archivo de unidad systemd correspondiente que controle. En otras palabras, un archivo .timer activa y gestiona el fichero .service correspondiente. Cuando se usa con un temporizador, el archivo .service no requiere una secci贸n [Install], ya que el temporizador administra el servicio.

Ejemplo

Para comprender los conceptos b谩sicos de las unidades de temporizador systemd, configuramos un temporizador que activa un script de shell existente que en este ejemplo llamamos foo.sh y guardado en la ubicaci贸n /usr/local/bin/foo.sh. Sustituye dicho script por el que quieras o crea uno con ese nombre y ubicaci贸n.

El primer paso es crear una unidad de servicio systemd que controle el script de shell. Para hacer esto, abre un nuevo archivo de texto para editarlo y agrega la siguiente definici贸n de unidad de servicio:

[Unit]
Description="script de shell foo"

[Service]
ExecStart=/usr/local/bin/foo.sh

Guarda el archivo con el nombre foo.service en el directorio /etc/systemd/system/.

A continuaci贸n, abre un nuevo archivo de texto para editarlo y agrega la siguiente definici贸n de temporizador:

[Unit]
Description="Ejecutar script de shell foo"

[Timer]
OnBootSec=5min
OnUnitActiveSec=24h
Unit=foo.service

[Install]
WantedBy=multi-user.target

La secci贸n [Timer] en el ejemplo anterior especifica qu茅 servicio activar (foo.service) y cu谩ndo activarlo. En este caso, la opci贸n OnBootSec especifica un temporizador mon贸tono que activa el servicio cinco minutos despu茅s del inicio del sistema, mientras que la opci贸n OnUnitActiveSec activa el servicio 24 horas despu茅s de que se haya activado el servicio (es decir, el temporizador activar谩 el servicio una vez al d铆a). ). Finalmente, la opci贸n WantedBy especifica que el temporizador debe iniciarse cuando el sistema haya alcanzado el objetivo multiusuario.

En lugar de un temporizador monot贸nico, puedes especificar uno en tiempo real usando la opci贸n OnCalendar. La siguiente definici贸n de temporizador en tiempo real activa la unidad de servicio relacionada una vez por semana, a partir del lunes a las 12:00.

[Timer]
OnCalendar=weekly
Persistent=true

La opci贸n Persistent=true indica que el servicio se activar谩 inmediatamente despu茅s de la activaci贸n del temporizador si el temporizador no cumpli贸 con la 煤ltima hora de inicio (por ejemplo, debido a que el sistema se apag贸).

La opci贸n OnCalendar tambi茅n se puede utilizar para definir fechas y horas espec铆ficas para activar un servicio utilizando el siguiente formato: D铆aDeSemana A帽o-Mes-D铆a Hora:Minuto:Segundo. El siguiente ejemplo activa un servicio a las 5 a.m. todos los d铆as:

OnCalendar=*-*-* 5:00:00

Puedes utilizar un asterisco para especificar cualquier valor y comas para enumerar los valores posibles. Utiliza dos valores separados por .. para indicar un rango contiguo. El siguiente ejemplo activa un servicio a las 6:00 p. m. los viernes de cada mes:

OnCalendar=Fri *-*-1..7 18:00:00

Para activar un servicio en diferentes momentos, puede especificar varias entradas de OnCalendar:

OnCalendar=Mon..Fri 10:00
OnCalendar=Sat,Sun 22:00

En el ejemplo anterior, un servicio se activa a las 10 a. m. los d铆as laborables y a las 10 p. m. los fines de semana.

Cuando hayas terminado de editar el archivo de la unidad del temporizador, gu谩rdalo con el nombre foo.timer en el directorio /etc/systemd/system/. Para verificar la exactitud de los archivos de unidad creados, ejecuta el siguiente comando:

sudo  systemd-analyze verify /etc/systemd/system/foo.*

Si el comando no devuelve ning煤n resultado, los archivos han pasado la verificaci贸n con 茅xito.

Para iniciar el temporizador, utiliza el comando

sudo systemctl start foo.timer

Para habilitar el temporizador en el arranque, ejecute el comando

sudo systemctl enable foo.timer

O bien activa y habilita a la vez con el comando

sudo systemctl enable --now foo.timer

Manejo de temporizadores

Dado que los temporizadores se tratan como unidades systemd normales, puedes administrarlos usando systemctl. Puedes iniciar un temporizador con systemctl start, habilitar un temporizador con systemctl enable, etc. Adem谩s, puedes enumerar todos los temporizadores activos utilizando el comando systemctl list-timers. Para enumerar todos los temporizadores, incluidos los inactivos, ejecuta el comando systemctl list-timers --all.