GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Eine kurze Einführung in Pfadeinheiten

Das heutige systemd liest seine Initialisierungskonfiguration für jeden Daemon aus einer Sammlung von Unit-Dateien , die oft nur Einheiten genannt werden . Mit Pfadeinheiten können Sie Dateien und Verzeichnisse auf bestimmte Ereignisse überwachen. Wenn ein bestimmtes Ereignis eintritt, eine Dienstleistungseinheit ausgeführt und trägt normalerweise den gleichen Namen wie die Pfadeinheit. Wie das funktioniert, zeige ich an einem einfachen Beispiel.

Nehmen wir an, wir möchten eine Datei überwachen. Immer wenn die Datei nach einem Schreibvorgang geschlossen wird, sollte ein bestimmtes Skript gestartet werden.

Die Pfadeinheit:example.path

Im Verzeichnis /etc/systemd/system/ wir erstellen die Datei example.path mit folgendem Inhalt:

[Unit]
Description=Monitor the file for changes

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

[Install]
WantedBy=multi-user.target

Im [Path] Abschnitt, PathChanged= gibt den absoluten Pfad zur zu überwachenden Datei an, während Unit= gibt an, welche Diensteinheit ausgeführt werden soll, wenn sich die Datei ändert. Diese Einheit (example.path ) sollte gestartet werden, wenn sich das System im Mehrbenutzermodus befindet.

Als Nächstes erstellen wir die entsprechende Diensteinheit example.service in /etc/systemd/system/ .

Die Diensteinheit:example.service

Wenn die Datei testfile ändert (was bedeutet, dass es sowohl geschrieben als auch geschlossen wird), wird die folgende Diensteinheit aufgerufen, um das angegebene Skript auszuführen:

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

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

[Install]
WantedBy=multi-user.target

In diesem Beispiel die Datei script.sh enthält nur den folgenden Code:

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

Um die Path-Unit zu testen, müssen diese beiden neuen Units aktiviert werden, also starte:

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

Wenn Sie nun die Datei testfile , die entsprechende Service Unit wird ausgeführt und die Datei output.txt wird im Benutzer john erstellt Home-Verzeichnis von .

Die folgende unvollständige und nicht erschöpfende Liste enthält einige Beispiele, bei denen Pfadeinheiten Ihren Sysadmin-Tag etwas einfacher machen könnten:

  • Ereignisgesteuerte Datenverarbeitung starten.
  • Dateien unter /etc überwachen , und senden Sie eine Benachrichtigung, wenn Änderungen vorgenommen werden.
  • Überwachen Sie den import Ordner für neue Dateien und starten Sie die Verarbeitung.

Dinge, die Sie beachten sollten

Bei meinen Tests mit Pfadeinheiten ist mir aufgefallen, dass unter Umständen nicht alle Ereignisse abgefangen werden. Richten Sie beispielsweise eine Pfadeinheit ein, um einen Pfad auf Änderungen zu überwachen, und führen Sie dann den folgenden Befehl aus:

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

Ich würde erwarten, dass die Diensteinheit zweimal ausgeführt wird, hier:das erste Mal für den touch Befehl und das zweite Mal für den rm Befehl. Ich habe einen Bugzilla-Bericht eingereicht, um zu sehen, ob dieses Problem auf das Design oder einen Fehler zurückzuführen ist, der behoben werden kann.

Wenn Sie mehr über systemd erfahren möchten Units, einschließlich Pfad- und Service-Units, werfen Sie einen Blick auf die folgenden Manpages:

  • systemd.unit (5)
  • systemd.path (5)
  • systemd.service (5)

Wenn Sie an den Ergebnissen meines Fehlerberichts interessiert sind, können Sie ihn hier verfolgen:

Fehler 1722627 – Path Unit erfasst nicht jedes Ereignis


Linux
  1. Einführung in GNU Autotools

  2. Cd in ein namensunbekanntes Verzeichnis in einem bekannten Pfad?

  3. Einführung in Docker

  4. Einführung in iptables

  5. Plesk:Einführung

Eine Einführung in bpftrace für Linux

Eine Einführung in den Vivaldi-Browser unter Linux

Eine kurze Einführung in Dockerfile

Eine Einführung in Ansible-Fakten

Eine kurze Einführung in Ansible Vault

Linux:Fügen Sie PATH ein Verzeichnis hinzu