Con bash
builtins, puoi fare:
coproc read -t 10 && wait "$!" || true
Dormire per 10 secondi senza usare sleep
. Il coproc
è fare in modo che read
Lo stdin di è un tubo da cui non uscirà mai nulla. || true
è perché wait
lo stato di uscita di rifletterà una consegna SIGALRM che causerebbe l'uscita della shell se errexit
l'opzione è impostata.
In altre shell:
mksh
e ksh93
avere sleep
built-in, non ha senso usare qualcos'altro lì (sebbene entrambi supportino anche read -t
).
zsh
supporta anche read -t
, ma ha anche un wrapper integrato attorno a select()
, quindi puoi usare anche:
zmodload zsh/zselect
zselect -t 1000 # centiseconds
Se quello che vuoi è pianificare le cose da eseguire da una sessione di shell interattiva, vedi anche zsh/sched
modulo in zsh
.
Hai delle alternative a sleep
:Sono at
e cron
. Contrariamente a sleep
questi hanno bisogno che tu fornisca l'ora in cui hai bisogno che vengano eseguiti.
-
Assicurati che il
atd
il servizio è in esecuzione eseguendoservice atd status
.
Ora diciamo che la data è 11:17 UTC; se devi eseguire un comando alle 11:25 UTC, la sintassi è:echo "This is a test" | at 11:25
.
Ora tieni presente cheatd
per impostazione predefinita non registrerà il completamento dei lavori. Per ulteriori informazioni, fare riferimento a questo collegamento. È meglio che la tua applicazione abbia la propria registrazione. -
Puoi programmare i lavori in
cron
, per ulteriori informazioni fare riferimento a:man cron
per vedere le sue opzioni ocrontab -e
per aggiungere nuovi posti di lavoro./var/log/cron
può essere controllato per le informazioni sull'esecuzione dei lavori.
Cordiali saluti sleep system call
sospende l'esecuzione in corso e la programma w.r.t. l'argomento passato ad esso.
MODIFICA:
Come menzionato da @Gaius, puoi anche aggiungere minuti a at
command.Ma diciamo che il tempo è 12:30:30
e ora hai eseguito lo scheduler con now +1 minutes
. Anche se è stato specificato 1 minuto, che si traduce in 60 secondi , il at
in realtà non aspetta fino a 12:31:30
per eseguire il lavoro, piuttosto esegue il lavoro in 12:31:00
. Le unità di tempo possono essere minutes, hours, days, or weeks
. Per ulteriori informazioni, fare riferimento a man at
es:echo "ls" | at now +1 minutes
Alcune altre idee.
top -d10 -n2 >/dev/null
vmstat 10 2 >/dev/null
sar 10 1 >/dev/null
timeout 10s tail -f /dev/null