Antworten:
at 18:00 shutdown now
erstellt einen "at" -Auftrag, der zum angegebenen Zeitpunkt vom at
Dämon oder möglicherweise vom cron
Dämon ausgeführt wird, je nach Ihrem System.
shutdown 18:00
Startet einen Prozess in Ihrer Shell, der bis zur angegebenen Zeit wartet und dann das Herunterfahren durchführt. Dieser Befehl kann beendet werden, wenn zB Ihre Shell-Sitzung beendet wird.
Das Nettoergebnis ist in den meisten Fällen dasselbe: Das System wird um 18:00 Uhr heruntergefahren.
Ein Unterschied ist, dass, wenn Sie verwenden at
der Job gespeichert Wenn das System vor 18:00 Uhr auf andere Weise heruntergefahren wird, wartet der Job beim nächsten Start noch auf die Ausführung. Wenn die Zeit bereits abgelaufen ist, wird das Herunterfahren sofort ausgeführt, was ziemlich unerwartet sein kann.
Ein weiterer Unterschied besteht darin, dass 5 Minuten vor dem geplanten Zeitpunkt shutdown 18:00
eine /run/nologin
Datei erstellt wird, um zu verhindern, dass sich Personen nach diesem Zeitpunkt anmelden. Außerdem werden Broadcast-Nachrichten gesendet, um angemeldete Benutzer zu warnen, dass das System heruntergefahren werden soll.
Sie müssen diese Unterschiede berücksichtigen, um zu entscheiden, welche verwendet werden sollen.
nohup
oder disown
oder was auch immer, wenn normalerweise tötet abzumelden laufende Prozesse Hintergrund. Unterschiedliche Systeme können dafür unterschiedliche Vorgaben haben. (Ich gehe davon aus, dass tatsächlich noch ein sudo shutdown
Prozess läuft, der lediglich signalisiert init
, dass ein Shutdown-Timer gestartet werden soll. Letzteres könnte tatsächlich der Fall sein, aber ich habe es in letzter Zeit nicht überprüft. Oh, aber @JdeBP hat; siehe diese Antwort.) )
at
so dass es über arbeitet cron
statt atd
?
Wenn Sie CentOS 7 haben, haben Sie ein systemd Betriebssystem und die Antwort ist anders.
at 18:00 shutdown now
Die Zeitplanung erfolgt weiterhin über das at
Subsystem, aber dieser shutdown
Befehl sowie der Befehl, den Sie direkt aufrufen shutdown 18:00
, unterscheiden sich. Es ist eigentlich das systemctl
Programm von systemd . systemctl
macht die Dinge anders.
Zunächst wird systemctl
die geplante Anforderung zum Herunterfahren abgeschickt, um von einem Daemon verarbeitet zu werden, ähnlich wie in diesem at
Fall. Dies ist jedoch ein systemd-Daemon logind
(das systemd-shutdownd
Daemon wurde im Mai 2015 aus systemd entfernt, und die Änderung ist seitdem auf spätere Nebenversionen von CentOS 7 übergegangen), nicht das at
Subsystem. systemctl
Spricht ein internes Protokoll mit einem (systemweiten) Desktop-Bus-Broker, mit dem wiederum kommuniziertlogind
.
Wie in diesem at
Fall gibt es also keinen shutdown
Prozess, der die wall
Nachrichten herunterzählt und abruft . Man kann sich also abmelden, was sich nicht auf den Zeitplan auswirkt, und das Abbrechen ist nicht so einfach wie das bloße Unterbrechen / Beenden des Vordergrundprozesses der Anmeldesitzung. Genau wie bei at
.
Es gibt immer noch Nachrichten, anders als im at
Fall, aber sie werden von ausgegeben logind
. Anders als in diesem at
Fall bleibt der geplante Job auch nach einem Neustart des Systems nicht bestehen, sodass ein tatsächliches Herunterfahren einen geplanten Job abbricht. Im Dateisystem befindet sich eine Datei, die sich jedoch unter befindet/run/systemd/shutdown
der sich jedoch nicht persistenter Speicher befindet.
Weitere Unterschiede bestehen darin, dass jeweils nur ein geplantes Herunterfahren möglich ist, während mehrere at
Jobs übergeben werden können. Policy Kit wendet Regeln an, shutdown
die im Nicht-Anmeldesitzungskontext als ausgeführt werdenat
Jobs, die sich von den Regeln für die shutdown
Ausführung unterscheiden Login-Session-Kontext. Letzteres ist möglicherweise zulässiger, da beispielsweise ein nicht privilegierter Benutzer, der bei der aktiven Anmeldesitzung angemeldet ist, das System herunterfahren kann.
shutdown 18:00
Startet einen Prozess in Ihrer Shell, der wartet". Was ist, wenn Sie sich vorher abmelden?