Úvod
Když uživatel zadá v Linuxu sekvenci více příkazů, příkazy se vykonají okamžitě jeden po druhém nebo souběžně (např. příkaz tee). Někdy je však nutné odložit provádění příkazů a poskytnout systému dostatek času, aby přinesl očekávané výsledky.
V tomto tutoriálu se naučíte používat Linux sleep
příkaz ke zpoždění spuštění příkazu v terminálu a skriptech shellu.
Předpoklady
- Systém se systémem Linux
- Přístup k příkazovému řádku
Co dělá příkaz spánku Linux?
sleep
příkaz pozastaví proces volání dalšího příkazu na určenou dobu. Tato vlastnost je užitečná, když provedení následujícího příkazu závisí na úspěšném dokončení předchozího příkazu.
Vysvětlení syntaxe příkazu spánku Linux
Syntaxe sleep
příkaz je jednoduchý:
sleep [number]
Ve výše uvedeném příkladu po sleep 5
byl proveden, druhý příkazový řádek se objevil s 5sekundovým zpožděním.
Ve výchozím nastavení systém přečte číslo po sleep
jako počet sekund. Chcete-li zadat jiné časové jednotky, použijte následující syntaxi:
sleep [number][unit]
sleep
příkaz přijímá čísla s plovoucí desetinnou čárkou. Umožňuje více hodnot, které se všechny sečtou, aby se vypočítala doba sleep
.
Dostupné jednotky jsou:
s
– sekundm
– minuth
– hodinyd
– dny
Chcete-li zastavit sleep
po jejím spuštění a před koncem zadané čekací doby stiskněte Ctrl + C
.
Chcete-li zobrazit nápovědu pro sleep
příkaz, zadejte:
sleep --help
Podrobnosti o verzi získáte zadáním:
sleep --version
Příklady příkazů spánku Linux
Následující části obsahují příklady použití sleep
příkaz v terminálu nebo skriptech shellu.
Nastavit budík
Použijte sleep
říci systému, aby po určité době přehrál soubor mp3. V příkladu je použit mplayer:
sleep 7h 30m && mplayer alarm.mp3
Zpoždění příkazů v terminálu
sleep
je užitečné pro vynucení doby mezi provedením dvou příkazů. Následující příklad vytváří echo
příkazy se provádějí v jednosekundových intervalech:
sleep 1 && echo "one" && sleep 1 && echo "two"
Přiřazení proměnné k příkazu spánku
sleep
je možné přiřadit proměnnou příkaz. Zvažte následující skript shellu:
#!/bin/bash
SLEEP_INTERVAL="30"
CURRENT_TIME=$(date +"%T")
echo "Time before sleep: ${CURRENT_TIME}"
echo "Sleeping for ${SLEEP_INTERVAL} seconds"
sleep ${SLEEP_INTERVAL}
CURRENT_TIME=$(date +"%T")
echo "Time after sleep: ${CURRENT_TIME}"
Skript definuje proměnnou nazvanou SLEEP_INTERVAL
jehož hodnota se později použije jako argument sleep
příkaz. Výstup tohoto příkladu skriptu ukazuje, že provádění trvalo 30 sekund:
Definujte intervaly kontroly
Následující příklad ilustruje použití sleep
příkaz ve skriptu, který kontroluje, zda je web online. Skript se zastaví, pokud úspěšně odešle ping na web, a sleep
zavádí 10sekundovou prodlevu mezi neúspěšnými pingy.
#!/bin/bash
while :
do
if ping -c 1 www.google.com &> /dev/null
then
echo "Google is online"
break
fi
sleep 10
done
Ponechte čas na dokončení operace
Možná používáte bash skript, který interně volá dva další bash skripty – jeden, který spouští testy na pozadí, a druhý, který vytiskne výsledky. Použijte sleep
abyste zabránili druhému skriptu vytisknout nesprávné výsledky, pokud se spustí před dokončením prvního skriptu:
while kill -0 $BACK_PID ; do
echo "Waiting for the process to end"
sleep 1
done
kill -0 $BACK_PID
příkaz zkontroluje, zda proces prvního skriptu stále běží. Pokud ano, vytiskne zprávu a na 1 sekundu přejde do režimu spánku, než znovu zkontroluje.
Předvídat latenci
Použijte sleep
umožnit latenci provádění určitých příkazů. Níže uvedený fragment skriptu ukazuje, jak sleep
dává CPU dostatek času na provedení výpočtu před další iterací.
for (( i = 1 ; i <= 250 ; i++ ));
do
sleep 1
qsub computation"${i}".pbs
done