GNU/Linux >> Linux Esercitazione >  >> Linux

Una breve introduzione alle unità di percorso

systemd di oggi legge la sua configurazione di inizializzazione per ogni demone da una raccolta di file unit , che spesso vengono chiamate semplicemente unità . Con unità di percorso , puoi monitorare file e directory per determinati eventi. Se si verifica un evento specifico, un'unità di servizio viene eseguito e di solito porta lo stesso nome dell'unità di percorso. Mostrerò come funziona con un semplice esempio.

Supponiamo di voler monitorare un file. Ogni volta che il file viene chiuso dopo una scrittura, dovrebbe iniziare uno script specifico.

L'unità di percorso:example.path

Nella directory /etc/systemd/system/ creiamo il file example.path con il seguente contenuto:

[Unit]
Description=Monitor the file for changes

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

[Install]
WantedBy=multi-user.target

Nel [Path] sezione, PathChanged= specifica il percorso assoluto del file da monitorare, mentre Unit= indica quale unità di servizio eseguire se il file cambia. Questa unità (example.path ) dovrebbe essere avviato quando il sistema è in modalità multiutente.

Successivamente, creiamo l'unità di servizio corrispondente example.service in /etc/systemd/system/ .

L'unità di servizio:example.service

Se il file testfile modifiche (il che significa che è sia scritto che chiuso), verrà chiamata la seguente unità di servizio per eseguire lo script specificato:

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

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

[Install]
WantedBy=multi-user.target

In questo esempio, il file script.sh contiene solo il seguente codice:

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

Per testare l'unità di percorso, entrambe queste nuove unità devono essere attivate, quindi esegui:

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

Se ora riscrivi o scrivi nel file testfile , viene eseguita l'unità di servizio corrispondente e il file output.txt viene creato nell'utente john home directory di.

Il seguente elenco incompleto e non esaustivo fornisce alcuni esempi in cui le unità di percorso potrebbero rendere un po' più semplice il tuo Sysadmin Day:

  • Avvia l'elaborazione dei dati basata sugli eventi.
  • Controlla i file in /etc e invia una notifica quando si verificano modifiche.
  • Controlla l'import cartella per i nuovi file e avvia l'elaborazione.

Cose di cui essere a conoscenza

Durante i miei test con le unità di percorso, ho notato che non tutti gli eventi vengono rilevati in determinate circostanze. Ad esempio, imposta un'unità di percorso per monitorare un percorso per le modifiche, quindi esegui il comando seguente:

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

Mi aspetto che l'unità di servizio venga eseguita due volte, qui:la prima volta per il touch comando e la seconda volta per rm comando. Ho presentato una segnalazione Bugzilla per vedere se questo problema è dovuto al design o a un problema tecnico che può essere risolto.

Se vuoi saperne di più su systemd unità, incluse le unità di percorso e di servizio, dai un'occhiata alle seguenti pagine man:

  • unità di sistema (5)
  • percorso systemd.(5)
  • systemd.service (5)

Inoltre, se sei interessato ai risultati della mia segnalazione di bug, puoi seguirla qui:

Bug 1722627 - Path Unit non intercetta tutti gli eventi


Linux
  1. Linguaggio di programmazione C - Introduzione

  2. Come gestire le unità systemd all'avvio

  3. Un'introduzione all'editor vi

  4. Una breve introduzione ai ruoli Ansible per l'amministrazione del sistema Linux

  5. CD in una directory con nome sconosciuto in un percorso noto?

Un'introduzione a bpftrace per Linux

Un'introduzione a Vivaldi Browser su Linux

Una breve introduzione a Dockerfile

Un'introduzione ai fatti Ansible

Una breve introduzione ad Ansible Vault

Linux:aggiungi una directory a PATH