GNU/Linux >> Znalost Linux >  >> Linux

Krátký úvod k jednotkám cest

Dnešní systemd načte svou inicializační konfiguraci pro každého démona z kolekce souborů jednotek , které se často nazývají pouze jednotky . S jednotkami cesty můžete sledovat soubory a adresáře pro určité události. Pokud dojde k zadané události, servisní jednotka se provede a obvykle nese stejný název jako jednotka cesty. Jak to funguje, ukážu na jednoduchém příkladu.

Předpokládejme, že bychom chtěli monitorovat soubor. Kdykoli je soubor po zápisu uzavřen, měl by se spustit konkrétní skript.

Jednotka cesty:example.path

V adresáři /etc/systemd/system/ vytvoříme soubor example.path s následujícím obsahem:

[Unit]
Description=Monitor the file for changes

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

[Install]
WantedBy=multi-user.target

V [Path] sekce, PathChanged= udává absolutní cestu k souboru, který má být monitorován, zatímco Unit= označuje, která servisní jednotka se má spustit, pokud se soubor změní. Tato jednotka (example.path ) by měl být spuštěn, když je systém v režimu pro více uživatelů.

Dále vytvoříme odpovídající servisní jednotku example.service v /etc/systemd/system/ .

Jednotka služby:example.service

Pokud je soubor testfile změny (to znamená, že je zapsán i uzavřen), bude zavolána následující servisní jednotka, aby provedla zadaný skript:

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

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

[Install]
WantedBy=multi-user.target

V tomto příkladu soubor script.sh obsahuje pouze následující kód:

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

Chcete-li otestovat jednotku cesty, obě tyto nové jednotky musí být aktivovány, takže spusťte:

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

Pokud nyní přepíšete – nebo do něj zapíšete – soubor testfile , spustí se odpovídající servisní jednotka a soubor output.txt je vytvořen v uživateli john domovský adresář uživatele.

Následující neúplný a neúplný seznam uvádí několik příkladů, kde by jednotky cest mohly trochu usnadnit váš Sysadmin Day:

  • Spusťte zpracování dat na základě událostí.
  • Sledujte soubory pod /etc a odeslat oznámení, když dojde ke změnám.
  • Sledujte import složku pro nové soubory a začněte zpracovávat.

Důležité informace

Během mých testů s jednotkami dráhy jsem si všiml, že ne všechny události jsou za určitých okolností zachyceny. Například nastavte jednotku cesty ke sledování změn cesty a poté spusťte následující příkaz:

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

Očekával bych, že servisní jednotka bude provedena dvakrát, zde:poprvé pro touch a podruhé pro rm příkaz. Podal jsem hlášení Bugzilla, abych zjistil, zda je tento problém způsoben designem nebo závadou, kterou lze opravit.

Pokud se chcete dozvědět více o systemd jednotky, včetně cest a servisních jednotek, podívejte se na následující manuálové stránky:

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

Pokud vás také zajímají výsledky mého hlášení o chybě, můžete jej sledovat zde:

Chyba 1722627 – Jednotka cesty nezachytí každou událost


Linux
  1. Úvod do GNU Autotools

  2. Jak spravovat systémové jednotky při spuštění

  3. Úvod do editoru vi

  1. Stručný úvod do rolí Ansible pro správu systému Linux

  2. Úvod do Dockeru

  3. Úvod do iptables

  1. Použití příkazu systemctl ke správě jednotek systemd

  2. Plesk:Úvod

  3. Služby Linuxu:existuje grafické uživatelské rozhraní pro služby?