Gibt es einen (Semi-) Standard-Unix-Befehl, der bis zu dem in der Befehlszeile angegebenen Zeitpunkt inaktiv bleibt? Mit anderen Worten, ich suche nach etwas ähnlichem sleep
Das würde Weckzeit und nicht Dauer kosten.
Zum Beispiel: sleeptill 05:00:00
Ich kann etwas programmieren, möchte das Rad aber lieber nicht neu erfinden, wenn es bereits etwas gibt.
Bonusfrage: Es wäre großartig, wenn es die Zeitzone dauern könnte (wie in sleeptill 05:00:00 America/New_York
).
bearbeiten Aufgrund der Art und Weise, in der ich mich gerade bewege, suche ich eher nach einer Lösung für "Schlaf bis T" als nach "Befehl bei T ausführen".
bearbeiten Um Zweifel zu vermeiden, wenn ich den Befehl um 18:00 Uhr ausführe und ihm sage, er soll um 17:00 Uhr aufwachen, erwarte ich, dass er 23 Stunden lang inaktiv ist (oder in einigen Eckfällen mit Sommerzeit zu tun hat, z 22 oder 24 Stunden.)
cron
, Ich vermute.sleep
-mögen.Antworten:
Wenn Sie unter Unix mit einem anständigen Datumsbefehl arbeiten und Bash verwenden, können Sie das% s-Format zur Berechnung der Zeit verwenden.
(17.00 Uhr ist 17.00 Uhr und zeigt an, dass das Datum nicht tatsächlich eingestellt werden soll.)
quelle
-j
zu-d
damit es auf meinen Linux-Systemen läuft.]date -d 'tomorrow 17:00'
.echo $(( ($(date -d "3:00" +%s) - $(date +%s) + (60*60*24)) % (60*60*24) ))
(Möglicherweise gibt es nur einige Probleme mit Sommerzeitänderungen.)Wie wäre es damit (die Ideen von w00t und Gille zu einer Funktion zusammenfassen)?
Verwendungszweck:
quelle
Schauen Sie sich das Linux / Unix an
at
Befehl . Verwenden Sie das 5AM-Beispiel:at 05:00 some_command
Es unterstützt auch Zeitzonen:
quelle
cron
oderat
, aber es wäre mühsam, damit fertig zu werden. Das ist der Grund, warum ich etwas suchesleep
-mögen. Im Moment habe ich meine eigene geschrieben.