
Ich weiß, dass man ein Herunterfahren für eine bestimmte Zeit planen kann, shutdown -h 21:45
und dass man für solche Dinge keine Crontabs verwenden sollte, da sie sich wiederholen. Wie kann ich ein Herunterfahren für eine bestimmte Zeit planen?Datumetwa am 31. August um 20:00 Uhr?
Antwort1
Der at
Befehl dient zum Planen einmaliger zukünftiger Ausführungen.
z.B
% at 8pm Aug 31
at> echo hello
at> <EOT>
job 161 at Sat Aug 31 20:00:00 2019
(das „<EOT>“ wurde durch Drücken von Strg-D erzeugt)
% atq
161 Sat Aug 31 20:00:00 2019 a sweh
Hier können Sie Ihren shutdown
Befehl eingeben.
Antwort2
Obwohl at
dies die naheliegende Vorgehensweise ist, denke ich, dass es auch Herunterfahren übersteht. Wenn die Maschine also vor dem geplanten Herunterfahren neu startet, wird sie möglicherweise zum geplanten Zeitpunkt erneut heruntergefahren. Daher können wir mit Bash und GNU Date ein verzögertes Herunterfahren verwenden.
/sbin/shutdown +$(( ( $( date -d "30 may 2019 13:15" +%s ) - $( date +%s ) ) / 60 + 1 ))
NB: Dies ist nur auf eine Minute genau. Es funktioniert, indem die geplante Zeit und jetzt in Sekunden seit der UNIX-Epoche umgerechnet werden, die Differenz berechnet, in Minuten umgerechnet und diese dann als Verzögerung bis zum Herunterfahren verwendet wird. Es funktioniert nicht richtig, wenn die geplante Zeit in der Vergangenheit liegt.
Antwort3
Neuere Ubuntu-Versionen verwenden systemd und wenn der herkömmliche atd
und zugehörige at
Scheduler für einmalige Befehle entweder nicht installiert ist oder nicht ausgeführt wirdEin einmaliger Befehl kann geplant werden mitsystemd-run
Das ist etwas einfacher als die manuelle Generierung einessystemd timer
:
systemd-run --on-calendar="2019-08-31 20:00:00 CET" /sbin/shutdown now
Antwort4
So führen Sie den Job nur in diesem Jahr aus:
0 20 31 8 * test $(/bin/date +\%Y) = "2019" && /sbin/shutdown now
So führen Sie den Job jedes Jahr aus:
0 20 31 8 * /sbin/shutdown now