GNU/Linux >> Tutoriales Linux >  >> Linux

Una breve introducción a las unidades de camino

systemd de hoy lee su configuración de inicialización para cada daemon de una colección de archivos de unidad , que a menudo se denominan simplemente unidades . Con unidades de ruta , puede monitorear archivos y directorios para ciertos eventos. Si ocurre un evento específico, una unidad de servicio se ejecuta, y por lo general lleva el mismo nombre que la unidad de ruta. Mostraré cómo funciona esto con un ejemplo simple.

Supongamos que nos gustaría monitorear un archivo. Cada vez que el archivo se cierra después de una escritura, debe iniciarse un script específico.

La unidad de ruta:ejemplo.path

En el directorio /etc/systemd/system/ creamos el archivo example.path con el siguiente contenido:

[Unit]
Description=Monitor the file for changes

[Path]
PathChanged=/home/john/testfile
Unit=example.service

[Install]
WantedBy=multi-user.target

En el [Path] sección, PathChanged= especifica la ruta absoluta al archivo a monitorear, mientras que Unit= indica qué unidad de servicio ejecutar si el archivo cambia. Esta unidad (example.path ) debe iniciarse cuando el sistema está en modo multiusuario.

A continuación, creamos la unidad de servicio correspondiente example.service en /etc/systemd/system/ .

La unidad de servicio:example.service

Si el archivo testfile cambios (lo que significa que se escribe y se cierra), se llamará a la siguiente unidad de servicio para ejecutar el script especificado:

[Unit]
Description=Executes script when a file has changed.

[Service]
Type=simple
ExecStart=/home/john/script.sh

[Install]
WantedBy=multi-user.target

En este ejemplo, el archivo script.sh contiene solo el siguiente código:

#!/bin/bash
echo "file changed" >/home/john/output.txt

Para probar la unidad de ruta, ambas unidades nuevas deben estar activadas, así que ejecute:

$ sudo systemctl enable example.{path,service}
$ sudo systemctl start example.path

Si ahora vuelve a escribir, o escribe en, el archivo testfile , se ejecuta la unidad de servicio correspondiente y el archivo output.txt se crea en el usuario john directorio de inicio de.

La siguiente lista incompleta y no exhaustiva ofrece algunos ejemplos en los que las unidades de ruta podrían facilitar un poco su Día del administrador del sistema:

  • Iniciar el procesamiento de datos basado en eventos.
  • Supervise los archivos en /etc y enviar una notificación cuando se produzcan cambios.
  • Supervise la import carpeta para archivos nuevos y comenzar a procesar.

Cosas a tener en cuenta

Durante mis pruebas con unidades de ruta, noté que no todos los eventos se capturan bajo ciertas circunstancias. Por ejemplo, configure una unidad de ruta para monitorear cambios en una ruta y luego ejecute el siguiente comando:

$ touch /path/file && rm /path/file

Esperaría que la unidad de servicio se ejecutara dos veces, aquí:la primera vez para el touch comando, y la segunda vez para el rm dominio. Presenté un informe de Bugzilla para ver si este problema se debe al diseño o a un error que se puede solucionar.

Fuentes y enlaces relacionados

Si desea obtener más información sobre systemd unidades, incluidas las unidades de ruta y servicio, eche un vistazo a las siguientes páginas man:

  • systemd.unidad (5)
  • systemd.ruta (5)
  • systemd.servicio (5)

Además, si está interesado en los resultados de mi informe de error, puede seguirlo aquí:

Error 1722627:la unidad de ruta no detecta todos los eventos


Linux
  1. Lenguaje de programación C - Introducción

  2. Una introducción al editor vi

  3. Una breve introducción a los roles de Ansible para la administración del sistema Linux

  4. Introducción a Docker

  5. Servicios de Linux:¿existe una GUI para los servicios?

Una introducción a bpftrace para Linux

Una introducción al navegador Vivaldi en Linux

Una breve introducción a Dockerfile

Una introducción a los hechos de Ansible

Una breve introducción a Ansible Vault

Linux:agregar un directorio a PATH