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
atdDienst ausgeführt wird, indemservice atd statusausgefü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, dassatdstandardmäß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
cronplanen , für mehr siehe:man cronum seine Optionen zu sehen odercrontab -eum neue Arbeitsplätze hinzuzufügen./var/log/cronkann 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