Unix: Schlafen bis zur angegebenen Zeit

Unix: Schlafen bis zur angegebenen Zeit

Gibt es einen (halb-)standardmäßigen Unix-Befehl, der bis zu der in der Befehlszeile angegebenen Zeit in den Ruhezustand wechselt? Mit anderen Worten: Ich suche nach etwas Ähnlichem, sleepdas eher die Weckzeit als die Dauer in Anspruch nimmt.

Zum Beispiel:sleeptill 05:00:00

Ich kann etwas programmieren, möchte aber das Rad nicht neu erfinden, wenn es bereits etwas gibt.

Bonusfrage: Es wäre toll, wenn es die Zeitzone (wie in sleeptill 05:00:00 America/New_York) berücksichtigen könnte.

bearbeitenAufgrund der Art meiner Tätigkeit suche ich eher nach einer „Schlafen bis T“-Lösung als nach einer „Befehl bei T ausführen“-Lösung.

bearbeitenUm Missverständnissen vorzubeugen: Wenn ich den Befehl um 18:00 Uhr ausführe und ihm sage, dass er um 17:00 Uhr aufwachen soll, erwarte ich, dass er 23 Stunden schläft (oder in einigen Sonderfällen, die mit der Sommerzeit zu tun haben, 22 oder 24 Stunden).

Antwort1

Wenn Sie ein Unix-System mit einem geeigneten Datumsbefehl verwenden und Bash nutzen, können Sie das %sFormat zur Zeitberechnung nutzen.

sleep $(( $(date -j 1700 +%s) - $(date +%s) ))
  • 1700es ist 17 Uhr.
  • -jSagen Sie Date, dass das Datum nicht wirklich festgelegt werden soll.

Antwort2

Wie wäre es damit (die Ideen von w00t und Gille in einer Funktion zu kombinieren)?

function sleep_until {
  seconds=$(( $(date -d "$*" +%s) - $(date +%s) )) # Use $* to eliminate need for quotes
  echo "Sleeping for $seconds seconds"
  sleep $seconds
}

Verwendung:

sleep_until 8:24
Sleeping for 35 seconds

sleep_until '23:00'
Sleeping for 52489 seconds

sleep_until 'tomorrow 1:00'
Sleeping for 59682 seconds

Antwort3

Schauen Sie sich die Linux/UnixatBefehl. Am Beispiel von 5 Uhr morgens:

at 05:00 some_command

Es unterstützt auch Zeitzonen:

Es kann ein Zeitzonenname wie GMT, UCT oder ZULU (ohne Berücksichtigung der Groß-/Kleinschreibung) folgen, um anzugeben, dass die Zeit in koordinierter Weltzeit angegeben ist. Andere Zeitzonen können mit der Umgebungsvariable TZ angegeben werden.

verwandte Informationen