Wie kann man Linux zu einem bestimmten Zeitpunkt vom Terminal aus herunterfahren?

46

Es scheint, dass ich mithilfe sudo shutdowneiner Zeit oder Minuten herunterfahren kann .

Gibt es eine Möglichkeit, datetime für das Herunterfahren anzugeben?

Askar
quelle

Antworten:

77

Sie können dies direkt aus dem tun shutdown command, siehe man shutdown:

SYNOPSIS
   /sbin/shutdown [-akrhPHfFnc] [-t sec] time [warning message]

[...]

   time   When to shutdown.

Also zum Beispiel:

shutdown -h 21:45

Das wird um shutdown -h21:45 Uhr laufen .


Bei Befehlen, die diese Funktionalität nicht bieten, können Sie Folgendes versuchen:

A. Verwenden von at

Der atDaemon ist genau dafür ausgelegt. Abhängig von Ihrem Betriebssystem müssen Sie es möglicherweise installieren. Auf Debian-basierten Systemen kann dies durchgeführt werden mit:

sudo apt-get install at

Es gibt drei Möglichkeiten, einen Befehl zu erteilen at:

  1. Pipe es:

    $ echo "ls > a.txt" | at now + 1 min
    warning: commands will be executed using /bin/sh
    job 3 at Thu Apr  4 20:16:00 2013
    
  2. Speichern Sie den Befehl, den Sie in einer Textdatei ausführen möchten, und übergeben Sie diese Datei an at:

    $ echo "ls > a.txt" > cmd.txt
    $ at now + 1 min < cmd.txt
    warning: commands will be executed using /bin/sh
    job 3 at Thu Apr  4 20:16:00 2013
    
  3. Sie können auch atBefehle von STDIN übergeben:

    $ at now + 1 min
    warning: commands will be executed using /bin/sh
    at> ls
    

    Drücken Sie dann, CtrlDum die atShell zu verlassen. Der lsBefehl wird in einer Minute ausgeführt.

Sie können sehr genaue Zeiten im Format angeben [[CC]YY]MMDDhhmm[.ss], wie in

$ at -t 201403142134.12 < script.sh

Das Skript wird script.sham 14. März 2014 um 21:34 und 12 Sekunden ausgeführt.

B. Verwenden von Cron (obwohl dies keine gute Idee für das Herunterfahren ist)

Der andere Ansatz ist die Verwendung des cronSchedulers, mit dem Aufgaben zu bestimmten Zeiten ausgeführt werden können. Es wird normalerweise für Aufgaben verwendet, die wiederholt werden. Sie können jedoch auch eine bestimmte Zeit angeben. Jeder Benutzer hat seine eigenen "Crontabs", die steuern, welche Jobs wann ausgeführt werden. Das allgemeine Format einer Crontab lautet:

*     *     *     *     *  command to be executed
-     -     -     -     -
|     |     |     |     |
|     |     |     |     +----- day of week (0 - 6) (Sunday=0)
|     |     |     +------- month (1 - 12)
|     |     +--------- day of month (1 - 31)
|     +----------- hour (0 - 23)
+------------- min (0 - 59)

Dies wird zum Beispiel lsjeden Tag um 14:04 Uhr ausgeführt:

04 14 * * * ls

So richten Sie einen Cronjob für ein bestimmtes Datum ein:

  1. Erstellen Sie eine neue Crontab, indem Sie ausführen crontab -e. Dies öffnet ein Fenster Ihres bevorzugten Texteditors.

  2. Fügen Sie diese Zeile der gerade geöffneten Datei hinzu. Dieses Beispiel wird am 15. März 2014 um 14:34 Uhr ausgeführt, wenn dieser Tag ein Freitag ist (es kann also auch mehrmals ausgeführt werden):

    34 14 15 5  /path/to/command        
    
  3. Speichern Sie die Datei und beenden Sie den Editor.

Diese SO-Antwort schlägt einen Weg vor, es nur einmal laufen zu lassen, aber ich habe es nie benutzt, deshalb kann ich nicht dafür bürgen.

terdon
quelle
2
Einen Shutdown mit cron zu planen, ist eine sehr schlechte Angewohnheit. Plötzlich werden Sie sich fragen, warum der Server jeden Montagmorgen ausfällt.
Ouki
4
@Ouki Es tut mir leid, aber ich sehe nicht, wo ich die Verwendung von cron zum Herunterfahren empfehle. Ich erwähne in einer Klammer, dass es möglich ist (es ist), aber empfehle es nicht. Wir neigen dazu, hier umfassende Antworten zu mögen, weshalb ich die anderen Alternativen angeboten habe, ohne vorzuschlagen, dass sie verwendet werden sollten shutdown. Ich fühle für diese schlechte Erfahrung, das hätte nicht angenehm sein können.
Terdon
2
Hier geht es mehr um Vorschläge, da Sie die shutdownPlanung mischen und crondieselbe Antwort erhalten ... Ob es sich um eine Workstation oder einen Mailserver mit 1000 Benutzern handelt (meine traurige Erfahrung), es geht mehr um die Konsequenzen einer schlechten Angewohnheit.
Ouki
3
Ich bin mit Ouki hier. Bei der Diskussion shutdownsollte man nicht mit einbeziehen cron. (Vor allem mit jemandem, der nicht weiß, warum das eine schreckliche Idee ist.)
Ricky Beam
2
Ich bin ein wenig verwirrt, dass diese Antwort mit Informationen zu führen scheint, die bereits von der Frage angenommen wurden. Offenbar weiß das OP, wie eine Zeit für das Herunterfahren angegeben wird, möchte jedoch wissen, wie sowohl ein Datum als auch eine Zeit angegeben werden. Dies wird in dieser Antwort angesprochen, aber es wird bereitgestellt, als ob es sich um zusätzliche Informationen handelt, wenn es das ist, wonach zuerst gefragt wurde.
Weeble
24

Nein, Sie können beim Befehl shutdown kein Datum angeben, es gibt jedoch zwei Alternativen:

1) Am einfachsten ist es, den Befehl at zu verwenden . Das folgende Beispiel wird shutdown +5zu einer bestimmten Uhrzeit und an einem bestimmten Tag ausgeführt:

echo "shutdown +5" | at 10:05am 2019-01-19

2) Wenn es Ihnen nichts ausmacht, Ihren Taschenrechner zu verwenden, und Sie sich innerhalb von 24 Stunden (24 * 60 = 1440 Minuten) ausschalten möchten, und Sie absolut sicher sind, dass das System zwischenzeitlich nicht neu gestartet wird:

shutdown -r +1440
ndemou
quelle
2
Der Grund für meine Antwort oben: Terdons Antwort ist richtig und sehr umfassend, aber zu gesprächig (IMHO zumindest)
ndemou
2
Mit gesprächig meinen Sie hilfreich und umfassend ... Ihre Antwort hat nicht einmal den atBefehl erklärt.
Anthony
@Anthony Ich glaube, diese Art der Verwendung atverdient keine Erklärung. Ich kann sehen, dass du anders glaubst. Unterschiedliche Meinungen, unterschiedliche Ansichten.
Ndemou
Diese Antwort ist nicht mehr wahr. Die shutdownBefehle van Smoorenburg, Upstart und systemd erlauben keine Datumsangabe. Aber das nosh-Toolset shutdownunterstützt die langjährige BSD-Syntax.
JdeBP
@JdeBP: Welche der beiden Alternativen ist Ihrer Meinung nach nicht mehr wahr und haben Sie getestet und bestätigt, dass dies nicht der Fall ist? Ich habe gerade beide Befehle in 3 Systemen (Ubuntu 18.04.16.04 & CentOS 7) getestet und sie haben gut funktioniert. In Bezug auf den Rest Ihres Kommentars ("The van Smoorenburg ...") bin ich mir nicht sicher, ob es eine Klarstellung Ihrer Aussage ist, dass diese Antwort nicht mehr wahr ist oder ein allgemeiner Kommentar. Vielleicht solltest du eine Antwort mit ein bisschen mehr Informationen posten.
am
6

Es wird Ihr System um 12:00 Uhr herunterfahren:

$ sudo shutdown -h 12:00

Optionen:

-h, -P, --poweroff

Maschine ausschalten.

-r, --reboot

Starten Sie die Maschine neu.

-c

Abbrechen eines ausstehenden Herunterfahrens

Hamed Kamrava
quelle
5
Ihre Methode zeigt nicht, wie man an einem bestimmten Datum herunterfährt ...
Askar