Jak pravidelně spouštět program pomocí příkazu Watch v systému Linux

Občas se stane, že potřebujete opakovaně spouštět určitý příkaz či program, abyste mohli monitorovat různé aspekty vašeho systému. Může jít o sledování běžících procesů, využití diskového prostoru nebo přihlášené uživatele. V takových situacích se hodí příkaz `watch`, který je součástí Linuxu. Ten vám umožní tyto úlohy automatizovat, takže se vyhnete jejich manuálnímu opakovanému spouštění.

S jeho pomocí můžete v reálném čase sledovat dění v systému, a to například přihlašování uživatelů, stav sítě, využití paměti a procesoru, zaplnění disku a další. Pojďme se podívat, jak se s příkazem `watch` v Linuxu pracuje.

Co je to příkaz Watch?

Příkaz `watch` v Linuxu funguje tak, že opakovaně spouští zadaný příkaz nebo program v pravidelných intervalech a zobrazuje jeho výstup v terminálu. Díky tomu můžete sledovat změny ve výstupu v reálném čase. Výstup je v každém intervalu obnovován a předchozí zobrazení příkazu je přepsáno. Ve výchozím nastavení se příkaz opakuje každé dvě sekundy, dokud jej ručně nezastavíte pomocí klávesové zkratky Ctrl + C.

Syntaxe příkazu watch

Základní syntaxe příkazu `watch` je následující:

 watch [volby] <příkaz> 

K dispozici je celá řada voleb příkazového řádku, které lze s příkazem `watch` používat. Pokud příkaz `watch` spustíte bez jakýchkoli voleb, zadaný příkaz se bude opakovat každé dvě sekundy. Například následující příkaz vám zobrazí výstup příkazu `ls`:

 watch ls -l ~/ 

Tento výstup vám bude ukazovat změny v obsahu adresáře. Pokud například vytvoříte, smažete nebo změníte velikost souboru, výstup se aktualizuje každé dvě sekundy a zobrazí nejnovější stav adresáře.

Spouštění příkazu v intervalu X sekund pomocí watch

Interval aktualizace příkazu `watch` si můžete sami nastavit. To znamená, že můžete příkazu `watch` říct, aby počkal zadaný počet sekund, než příkaz znovu spustí. Pro změnu intervalu aktualizace použijte volbu `-n` následovanou časovým intervalem v sekundách.

 watch -n <sekundy> <příkaz> 

Pokud například chcete spustit příkaz každých 5 sekund, zadejte:

 watch -n 5 <příkaz> 

Zvýraznění změn mezi aktualizacemi

Příkaz `watch` při každé aktualizaci svůj výstup přepíše. Nicméně, můžete si také nechat zvýraznit změny mezi předchozím a aktualizovaným výstupem pomocí volby `-d`.

 watch -d <příkaz> 

Skrytí záhlaví ve výstupu příkazu watch

Ve výchozím nastavení příkaz `watch` zobrazuje v horní části každého výstupu záhlaví, které obsahuje informaci o intervalu aktualizace, název příkazu a aktuální datum a čas systému. Toto záhlaví můžete ze zobrazení odstranit pomocí volby `-t`:

 watch -t <příkaz> 

Přehrávání pípnutí při chybě

Když proces v Linuxu skončí, vrátí tzv. návratový kód. Podle konvence je hodnota 0 považována za úspěch a jakákoliv jiná hodnota (nenulová) značí chybu. Volba `-b` příkazu `watch` zajistí, že se přehraje pípnutí, pokud příkaz vrátí nenulový návratový kód.

Řekněme, že chcete monitorovat službu sshd.service a dostávat upozornění, když se tato služba zastaví. V takovém případě byste použili následující příkaz:

 watch -b sudo systemctl status sshd.service 

Tento příkaz spustí pípnutí v okamžiku, kdy se služba zastaví. Pípání přestane, jakmile se služba znovu spustí. Pro otestování tohoto chování můžete v jiném okně terminálu zastavit tuto službu. Pípání bude pokračovat, dokud službu opět nespustíte. Pro využití této funkce je však potřeba mít v systému nainstalovaný balíček pro pípnutí.

Ukončení příkazu watch při změně výstupu

Příkazu `watch` můžete také dát pokyn, aby se zastavil a skončil, jakmile se výstup příkazu změní. To provedete pomocí volby `-g`. Tato možnost se hodí ve scénářích, kde čekáte na konkrétní změny ve výstupu.

Jakmile se výstup změní, příkaz `watch` se ukončí. Můžete ji kombinovat s příkazem `echo` pro zobrazení zprávy na obrazovce.

Například, pokud čekáte, až se v adresáři objeví určitý soubor, následující příkaz bude sledovat adresář a jakmile se soubor objeví, příkaz `watch` se zastaví a na terminálu se zobrazí hláška „file arrived“:

 watch -g "ls -l | grep filename" && echo "file arrived" 

Dalším užitečným příkladem může být upozornění na přihlášení konkrétního uživatele do systému:

 watch -g "who | grep username" && echo "username logged in" 

Tento příkaz bude monitorovat výstup příkazu `who`, který vypisuje seznam přihlášených uživatelů. Jakmile se zadaný uživatel přihlásí, příkaz `watch` se zastaví a na terminálu se objeví zpráva.

Podobně můžete dát příkazu `watch` instrukci, aby se ukončil, pokud dojde k nějakým změnám v souboru. Mějte na paměti, že v případě řetězení příkazů musíte celý příkaz uzavřít do uvozovek.

Sledování aktivit ve vašem systému Linux

Pokud zjistíte, že opakovaně provádíte stejný proces, zvažte jeho automatizaci pomocí příkazu `watch`. Ušetříte si tak neustálé vypisování příkazů a zároveň budete mít přehled o změnách.

Příkaz `watch` můžete také kombinovat s dalšími příkazy Linuxu pro sledování systémových zdrojů a aktivit, a také pro monitorování změn v souborech či adresářích.