Herunterfahren zu einem bestimmten Datum

11

Ich weiß, dass Sie eine Abschaltung für eine bestimmte Zeit über planen können shutdown -h 21:45und dass Sie Crontabs wegen ihrer Wiederholung nicht für solche Dinge verwenden sollten. Wie kann ich eine Abschaltung für ein bestimmtes Datum wie den 31. August um 20:00 Uhr planen ?

HDM-Upload
quelle

Antworten:

7

Neuere Ubuntu-Versionen verwenden systemd. Wenn der herkömmliche atdund zugehörige atScheduler für einmalige Befehle entweder nicht installiert ist oder nicht ausgeführt wird, kann ein einmaliger Befehl geplant werden,systemd-run der etwas einfacher ist als das manuelle Generieren eines systemd timer:

 systemd-run --on-calendar="2019-08-31 20:00:00 CET" /sbin/shutdown now
HBruijn
quelle
2
Die Ironie ist, dass es fast überflüssig ist, einen ganzen Dienst zu starten, um dies zu tun . Der Abschaltmechanismus von systemd selbst unterstützt beliebige Zeitpunkte. Das Befehlszeilentool bietet einfach keinen Zugriff darauf, da es nicht mit der Befehlszeile des BSD mithalten kann shutdown. Wie ich in einer anderen Antwort schrieb, könnten Sie, die dies wollen, versuchen, die System-Leute davon zu überzeugen, ihr shutdownWerkzeug leistungsfähiger zu machen , mit einer Syntax von Jahrzehnten, anstatt mit den Häusern herumzugehen systemd-run.
JdeBP
Ich erhalte eine ungültige Kalenderspezifikation: 2019-08-31 20:00:00 CET
HdM Upload
12

Der atBefehl dient zum Planen einer einmaligen zukünftigen Ausführung.

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 shutdownBefehl eingeben.

Stephen Harris
quelle
Ja! Ich hatte vergessen, atals ich gepostet habe - atist definitiv dafür im Allgemeinen gedacht, obwohl in einem Unternehmen die akzeptierte Methode sein kann atoder cron, abhängig von den Konventionen in Bezug auf Konfigurationsmanagement / -bereitstellung.
flow2k
Es ist nicht genau gleichwertig, beachten Sie. unix.stackexchange.com/q/465322/5132
JdeBP
atkann auch Befehle von einer Pipe übernehmen : echo "echo yup > $(tty)" | at now.
Mosvy
7

Während atdie offensichtliche Art und Weise, dies zu tun, ich denke , es Abschaltungen überleben wird, so dass , wenn die Maschine neu startet vor der geplanten Abschaltung, könnte er erneut zum geplanten Zeitpunkt. Daher können wir mit Bash und GNU-Datum 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 konvertiert die geplante Zeit und jetzt in Sekunden seit der UNIX-Epoche, berechnet die Differenz, konvertiert in Minuten und verwendet diese dann als Verzögerung für das Herunterfahren. Es funktioniert nicht richtig, wenn die geplante Zeit in der Vergangenheit liegt.

CSM
quelle
3

Sie verwenden einen besseren shutdownBefehl.

Die shutdownBefehle van Smoorenburg, Upstart und systemd erlauben keine Datumsangabe. Der BSD- shutdownBefehl verwendet jedoch einen Datumswert in seiner Angabe, wann er heruntergefahren werden soll, in der Form yymmddhhmm. Dies ist seit 4BSD der Fall und bleibt dies auch bei FreeBSD und OpenBSD. NetBSD erweiterte es auf ccyymmddhhmm.

Da das Nosh-Toolset auch auf den BSDs verwendet werden kann, habe ich meinem shutdownBefehl die gleiche Funktion gegeben und ihn auf CCYYMMDDHHMMpro NetBSD erweitert. Und da das nosh-Toolset auch unter Linux verwendet werden kann, gibt Linux einen Befehl zum Herunterfahren, der Datumsangaben enthält.

Es funktioniert natürlich mit dem Nosh system-manager. Es funktioniert auch mit einigen anderen Systemen. Es sendet Signale an Prozess Nr. 1, um Dinge auszuführen, und die gleichen Signale werden von einigen anderen Systemmanagern verstanden, z. B. systemddie auch damit heruntergefahren werden können.

Sie könnten es oder ein ähnliches Werkzeug verwenden. oder Sie könnten versuchen, die Autoren anderer Linux- shutdownProgramme davon zu überzeugen , ihre Tools so zu erweitern, dass sie auch so leistungsfähig sind wie das BSD shutdown.

Weiterführende Literatur

  • Jonathan de Boyne Pollard (2018). shutdown. Nosh Toolset Handbuchseiten. Software.
  • Jonathan de Boyne Pollard (2018). system-manager. Nosh Toolset Handbuchseiten. Software.
  • shutdown. System Manager-Handbuch . NetBSD-Handbuchseiten. 2011-11-04.
  • shutdown. FreeBSD System Manager-Handbuch . 2018-01-01.
  • shutdown. OpenBSD-Handbuchseiten. 2015-01-21.
  • /unix//a/465337/5132
JdeBP
quelle
1

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
Freddy
quelle
-4

Möglicherweise gibt es eine Option zur Eingabe des Jahres in den shutdownBefehl, aber cron kann verwendet werden, um Befehle zu einem bestimmten Zeitpunkt nur einmal auszuführen. Versuchen Sie es in Ihrem Beispiel

0 0 31 8 ? 2019  shutdown

Achtung: Das oben Genannte ist keine Standard-Cron-Syntax.

flow2k
quelle
2
1. Hier steht nicht 20:00 Uhr, sondern Mitternacht. 2. Ich habe noch nie einen Cronjob mit sechs Feldern für das Timing gesehen. Auf welche Cron-Implementierung beziehen Sie sich?
Wildcard
2
Es gibt kein yearFeld im crontabZeitplan
Seamus
Ich habe später festgestellt, dass diese Syntax kein "Standard-Cron" ist, daher stimme ich zu, dass sie nicht zum Nennwert genommen werden sollte. OP scheint zu implizieren, dass mit der Verwendung von cron ein Leistungsverlust verbunden ist. In meiner Antwort habe ich daher versucht zu klären, dass die Implementierung von cron von Natur aus ineffizient ist und für einmalige Aufgaben ungeeignet ist. Denkst du das auch?
flow2k