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
atdsluž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, žeatdve 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 cronzobrazíte jeho možnosti nebocrontab -epřidat nová pracovní místa./var/log/cronlze 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