at 18:00 shutdown now
und shutdown 18:00
starten sie den gleichen Dienst? Arbeiten sie genauso?
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.
shutdown 18:00
Startet einen Prozess in Ihrer Shell, der wartet". Was ist, wenn Sie sich vorher abmelden?nohup
oderdisown
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 einsudo shutdown
Prozess läuft, der lediglich signalisiertinit
, 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 arbeitetcron
stattatd
?Und jetzt antwortete das System.
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 dasat
Subsystem, aber diesershutdown
Befehl sowie der Befehl, den Sie direkt aufrufenshutdown 18:00
, unterscheiden sich. Es ist eigentlich dassystemctl
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 diesemat
Fall. Dies ist jedoch ein systemd-Daemonlogind
(dassystemd-shutdownd
Daemon wurde im Mai 2015 aus systemd entfernt, und die Änderung ist seitdem auf spätere Nebenversionen von CentOS 7 übergegangen), nicht dasat
Subsystem.systemctl
Spricht ein internes Protokoll mit einem (systemweiten) Desktop-Bus-Broker, mit dem wiederum kommuniziertlogind
.Wie in diesem
at
Fall gibt es also keinenshutdown
Prozess, der diewall
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 beiat
.Es gibt immer noch Nachrichten, anders als im
at
Fall, aber sie werden von ausgegebenlogind
. Anders als in diesemat
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 dieshutdown
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.Weitere Lektüre
quelle