Mit bash
builtins, können Sie Folgendes tun:
coproc read -t 10 && wait "$!" || true
10 Sekunden schlafen, ohne sleep
zu verwenden . Die coproc
ist damit read
zu machen 's stdin ist eine Pipe, aus der niemals etwas herauskommen wird. || true
weil wait
Der Exit-Status von wird eine SIGALRM-Zustellung widerspiegeln, die dazu führen würde, dass die Shell beendet wird, wenn errexit
Option ist gesetzt.
In anderen Shells:
mksh
und ksh93
haben sleep
eingebaut, es hat keinen Sinn, dort etwas anderes zu verwenden (obwohl beide auch read -t
unterstützen ).
zsh
unterstützt auch read -t
, hat aber auch einen eingebauten Wrapper um select()
, also können Sie auch verwenden:
zmodload zsh/zselect
zselect -t 1000 # centiseconds
Wenn Sie planen möchten, dass Dinge von einer interaktiven Shell-Sitzung ausgeführt werden, lesen Sie auch zsh/sched
Modul in zsh
.
Sie haben Alternativen zu sleep
:Sie sind at
und cron
. Im Gegensatz zu sleep
für diese müssen Sie die Zeit angeben, zu der sie ausgeführt werden sollen.
-
Stellen Sie sicher, dass
atd
Dienst ausgeführt wird, indemservice atd status
ausgeführt wird .
Nehmen wir nun an, das Datum ist 11:17 Uhr UTC; Wenn Sie einen Befehl um 11:25 UTC ausführen müssen, lautet die Syntax:echo "This is a test" | at 11:25
.
Denken Sie jetzt daran, dassatd
standardmäßig wird der Abschluss der Jobs nicht protokolliert. Weitere Informationen finden Sie unter diesem Link. Es ist besser, wenn Ihre Anwendung über eine eigene Protokollierung verfügt. -
Sie können Jobs in
cron
planen , für mehr siehe:man cron
um seine Optionen zu sehen odercrontab -e
um neue Arbeitsplätze hinzuzufügen./var/log/cron
kann auf Informationen zur Ausführung von Jobs überprüft werden.
FYI sleep system call
setzt die aktuelle Ausführung aus und plant sie w.r.t. das Argument wurde ihm übergeben.
BEARBEITEN:
Wie @Gaius erwähnt hat, können Sie at
auch Minuten hinzufügen Befehl. Aber nehmen wir an, die Zeit ist 12:30:30
und jetzt haben Sie den Scheduler mit now +1 minutes
ausgeführt . Obwohl 1 Minute, was 60 Sekunden entspricht, angegeben wurde, wird der at
wartet nicht wirklich bis 12:31:30
um den Job auszuführen, sondern führt den Job bei 12:31:00
aus . Die Zeiteinheiten können minutes, hours, days, or weeks
sein . Weitere Informationen finden Sie unter man at
B.:echo "ls" | at now +1 minutes
Einige andere Ideen.
top -d10 -n2 >/dev/null
vmstat 10 2 >/dev/null
sar 10 1 >/dev/null
timeout 10s tail -f /dev/null