Jak spustit nebo opakovat příkaz Linux každých X sekund navždy
Správce systému často potřebuje spouštět příkaz opakovaně v určitých časových obdobích. Tyto úkoly lze často snadno dokončit pomocí jednoduchých příkazů cron. Ve většině případů by to mělo fungovat, ale nejkratší doba, po kterou můžete příkaz cron spustit, je každou 1 minutu. Věřte nebo ne, v mnoha případech je to příliš pomalé.
V tomto tutoriálu se naučíte jednoduché skriptovací techniky pro sledování nebo sledování konkrétního příkazu v nepřetržitě spuštěném stavu podobném top příkazu (nepřetržitě sledovat proces a vytížení paměti) ve výchozím nastavení každé 3 sekundy.
Nebudeme se pozastavovat nad důvody, proč byste museli spouštět příkazy tak často. Věřím, že každý k tomu má jiné důvody ve své každodenní práci nebo dokonce doma u počítačů a notebooků.
1. Použijte příkaz k hodinkám
Watch je linuxový příkaz, který vám umožňuje pravidelně spouštět příkaz nebo program a také zobrazuje výstup na obrazovce. To znamená, že výstup programu uvidíte včas. Ve výchozím nastavení hodinky znovu spustí příkaz/program každé 2 sekundy. Interval lze snadno změnit tak, aby vyhovoval vašim požadavkům.
Monitorujte využití paměti
„Watch“ se používá velmi snadno, pro otestování můžete okamžitě spustit terminál Linux a zadat následující příkaz:
watch free -m
Výše uvedený příkaz zkontroluje volnou paměť vašeho systému a aktualizuje výsledky příkazu free každé dvě sekundy.
Jak je vidět z výše uvedeného výstupu, máte záhlaví, které zobrazuje informace o (zleva doprava) intervalu aktualizace, příkazu, který se provádí, a aktuálním čase. Pokud chcete toto záhlaví skrýt, můžete použít volbu -t
.
Další logickou otázkou je – jak změnit interval provádění. Pro tento účel můžete použít možnost -n
, která určuje interval, ve kterém bude příkaz proveden. Tento interval je uveden v sekundách. Řekněme, že chcete spouštět soubor script.sh
každých 10 sekund, můžete to udělat takto:
watch -n 10 script.sh
Upozorňujeme, že pokud spustíte příkaz, jak je ukázáno výše, budete muset cd
do adresáře (přečtěte si Naučte se 15 příkladů cd příkazů), kde skript je umístěn nebo jinak určete úplnou cestu k tomuto skriptu.
Další užitečné možnosti příkazu watch jsou:
-b
– vytvoří pípnutí, pokud je ukončení příkazu nenulové.-c
– Interpretuje barevné sekvence ANSI.-d
– zvýrazní změny ve výstupu příkazu.
Sledujte přihlášené uživatele, dobu provozuschopnosti a průměrnou zátěž
Řekněme, že chcete monitorovat přihlášené uživatele, dobu provozu serveru a průměrný výkon zatížení v nepřetržité fázi každých několik sekund, pak použijte následující příkaz, jak je znázorněno:
watch uptime
Chcete-li příkaz ukončit, stiskněte CTRL+C
.
Zde se příkaz 'uptime'
spustí a ve výchozím nastavení zobrazí aktualizované výsledky každé 2 sekundy.
Sledujte průběh příkazu kopírování
V Linuxu se při kopírování souborů z jednoho umístění na druhé pomocí příkazu cp
nezobrazuje průběh dat. Chcete-li vidět průběh kopírování dat, můžete použít watch
příkaz spolu s příkazem du -s pro kontrolu využití disku v reálném čase.
cp ubuntu-15.10-desktop-amd64.iso /home/tecmint/ &
watch -n 0.1 du -s /home/tecmint/ubuntu-15.10-desktop-amd64.iso
Pokud si myslíte, že výše uvedený proces je příliš komplikovaný na to, abyste dosáhli, pak vám doporučuji přejít na příkaz Advance copy, který ukazuje průběh dat při kopírování.
2. Použijte příkaz spánku
Spánek se často používá k ladění skriptů shellu, ale má také mnoho dalších užitečných účelů. Například v kombinaci s smyčkami for
nebo while
můžete získat docela úžasné výsledky.
Pokud jste v bash skriptování noví, můžete se podívat na našeho průvodce bashovými smyčkami zde.
V případě, že o příkazu "sleep"
slyšíte poprvé, slouží k odložení něčeho o určitou dobu. Ve skriptech jej můžete použít k tomu, abyste svému skriptu řekli, aby spustil příkaz 1, počkal 10 sekund a poté spustil příkaz 2.
Pomocí výše uvedených smyček můžete bashovi říct, aby spustil příkaz, usnul na N množství sekund a poté příkaz znovu spustil.
Níže můžete vidět příklady obou smyček:
Příklad smyčky for
for i in {1..10}; do echo -n "This is a test in loop $i "; date ; sleep 5; done
Výše uvedený řádek spustí příkaz echo a zobrazí aktuální datum, celkem 10krát, s 5 sekundami spánku mezi spuštěními.
Zde je ukázkový výstup:
This is a test in loop 1 Wed Feb 17 20:49:47 EET 2016
This is a test in loop 2 Wed Feb 17 20:49:52 EET 2016
This is a test in loop 3 Wed Feb 17 20:49:57 EET 2016
This is a test in loop 4 Wed Feb 17 20:50:02 EET 2016
This is a test in loop 5 Wed Feb 17 20:50:07 EET 2016
This is a test in loop 6 Wed Feb 17 20:50:12 EET 2016
This is a test in loop 7 Wed Feb 17 20:50:17 EET 2016
This is a test in loop 8 Wed Feb 17 20:50:22 EET 2016
This is a test in loop 9 Wed Feb 17 20:50:27 EET 2016
This is a test in loop 10 Wed Feb 17 20:50:32 EET 2016
Příkazy echo a date můžete změnit pomocí vlastních příkazů nebo skriptů a změnit interval spánku podle svých potřeb.
Příklad smyčky while
while true; do echo -n "This is a test of while loop";date ; sleep 5; done
Zde je ukázkový výstup:
This is a test of while loopWed Feb 17 20:52:32 EET 2016
This is a test of while loopWed Feb 17 20:52:37 EET 2016
This is a test of while loopWed Feb 17 20:52:42 EET 2016
This is a test of while loopWed Feb 17 20:52:47 EET 2016
This is a test of while loopWed Feb 17 20:52:52 EET 2016
This is a test of while loopWed Feb 17 20:52:57 EET 2016
Výše uvedený příkaz bude spuštěn, dokud jej uživatel neukončí nebo nepřeruší. Může se hodit, pokud potřebujete spustit příkaz běžící na pozadí a nechcete počítat s cronem.
Důležité: Při použití výše uvedených metod důrazně doporučujeme nastavit dostatečně dlouhý interval, abyste měli dostatek času na dokončení příkazu před dalším spuštěním.
Závěr
Ukázky v tomto tutoriálu jsou užitečné, ale nejsou určeny k úplnému nahrazení nástroje cron. Je na vás, abyste zjistili, která z nich vám vyhovuje lépe, ale pokud bychom měli oddělit použití obou technik, řekl bych toto:
- Použijte cron, když potřebujete pravidelně spouštět příkazy i po restartu systému.
- Použijte metody popsané v tomto kurzu pro programy/skripty, které se mají spouštět v rámci aktuální uživatelské relace.
Jako vždy, pokud máte nějaké dotazy nebo připomínky, neváhejte je odeslat v sekci komentářů níže.