GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Shell:Ist es möglich, einen Befehl zu verzögern, ohne `sleep` zu verwenden?

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, indem service 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, dass atd 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 oder crontab -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

Linux
  1. Sudo-Befehl nach langem Schlafanruf ohne erneute Aufforderung zum Sudo-Passwort?

  2. Ein XML ohne Lf Möchten Sie es mit dem Sed-Befehl in der Shell hübsch machen?

  3. Verwenden des passwd-Befehls innerhalb eines Shell-Skripts

  4. Bash-Skript:Verwendung eines Skriptbefehls aus einem Bash-Skript zum Protokollieren einer Sitzung

  5. Berechnung des gerundeten Prozentsatzes in Shell Script ohne Verwendung von bc

Einfaches Verständnis von Shell-Befehlen mit dem Skript „Explain Shell“ in Linux

So wechseln Sie automatisch zu einem Verzeichnis, ohne den Cd-Befehl in Linux zu verwenden

Verschiedene Möglichkeiten zum Auflisten von Verzeichnisinhalten ohne Verwendung des Befehls ls

Verwendung der Verlaufsfunktion in Bash Shell auf Ubuntu 16.04 LTS-Server

Ist es möglich, Ordner mit Shell-Skript rekursiv zu erstellen?

Wie setze ich die Umgebungsvariable in GDB mit dem Shell-Befehl?