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.
Zdroje a související odkazy
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