S bash
vestavěné, můžete:
coproc read -t 10 && wait "$!" || true
Chcete-li usnout na 10 sekund bez použití sleep
. coproc
je udělat tak, že read
's stdin je potrubí, odkud nikdy nic nevyjde. || true
protože wait
stav ukončení bude odrážet doručení SIGALRM, které způsobí ukončení shellu, pokud errexit
možnost je nastavena.
V jiných shellech:
mksh
a ksh93
mít sleep
vestavěný, nemá smysl tam používat něco jiného (ačkoli oba také podporují read -t
).
zsh
podporuje také read -t
, ale má také vestavěný obal kolem select()
, takže můžete také použít:
zmodload zsh/zselect
zselect -t 1000 # centiseconds
Pokud chcete naplánovat spouštění věcí z interaktivní relace shellu, podívejte se také na zsh/sched
modul v zsh
.
Máte alternativy k sleep
:Jsou at
a cron
. Na rozdíl od sleep
tyto potřebují, abyste poskytli čas, ve kterém je potřebujete ke spuštění.
-
Ujistěte se, že
atd
služba běží spuštěnímservice atd status
.
Nyní řekněme, že datum je 11:17 UTC; pokud potřebujete provést příkaz v 11:25 UTC, syntaxe je:echo "This is a test" | at 11:25
.
Nyní mějte na paměti, žeatd
ve výchozím nastavení nebude protokolování dokončení úloh. Více viz tento odkaz. Je lepší, aby vaše aplikace měla vlastní protokolování. -
Úlohy můžete plánovat v
cron
, více viz:man cron
zobrazíte jeho možnosti nebocrontab -e
přidat nová pracovní místa./var/log/cron
lze zkontrolovat informace o provádění úloh.
Pro informaci sleep system call
pozastaví aktuální provádění a naplánuje jej w.r.t. argument na to přešel.
UPRAVIT:
Jak zmínil @Gaius, můžete také přidat čas v minutách na at
command.Ale řekněme, že čas je 12:30:30
a nyní jste spustili plánovač s now +1 minutes
. I když byla zadána 1 minuta, což znamená 60 sekund, at
opravdu nečeká do 12:31:30
k provedení úlohy, spíše provede úlohu na 12:31:00
. Časové jednotky mohou být minutes, hours, days, or weeks
. Více viz man at
např.:echo "ls" | at now +1 minutes
Některé další nápady.
top -d10 -n2 >/dev/null
vmstat 10 2 >/dev/null
sar 10 1 >/dev/null
timeout 10s tail -f /dev/null