Was ist der Unterschied zwischen dem Herunterfahren um 18:00 Uhr und dem Herunterfahren um 18:00 Uhr?

30

at 18:00 shutdown nowund shutdown 18:00starten sie den gleichen Dienst? Arbeiten sie genauso?

Yang
quelle

Antworten:

48

at 18:00 shutdown nowerstellt einen "at" -Auftrag, der zum angegebenen Zeitpunkt vom atDämon oder möglicherweise vom cronDämon ausgeführt wird, je nach Ihrem System.

shutdown 18:00Startet 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:00eine /run/nologinDatei 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.

wurtel
quelle
1
" shutdown 18:00Startet einen Prozess in Ihrer Shell, der wartet". Was ist, wenn Sie sich vorher abmelden?
RonJohn
1
@RonJohn: Dann kommt es , wenn Sie verwenden nohupoder disownoder 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 shutdownProzess 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.) )
Peter Cordes
Ist es wirklich möglich einzurichten , atso dass es über arbeitet cronstatt atd?
Terdon
3
Es gibt einen Diamantenmoderator, der nicht gelesen hat, wie man fragt . (-: Sie werden feststellen, dass diese Frage vor vier Jahren unter unix.stackexchange.com/questions/147643 gestellt wurde .
JdeBP
"Außerdem werden Broadcast-Nachrichten gesendet, um angemeldete Benutzer zu warnen, dass das System heruntergefahren wird." Ich würde sagen, dies ist der wichtigste Unterschied bei Servern mit vielen Benutzern. Ich möchte ihn in dieser Antwort noch stärker hervorheben.
JiK
23

Und jetzt antwortete das System.

Wenn Sie CentOS 7 haben, haben Sie ein systemd Betriebssystem und die Antwort ist anders.

at 18:00 shutdown nowDie Zeitplanung erfolgt weiterhin über das atSubsystem, aber dieser shutdownBefehl sowie der Befehl, den Sie direkt aufrufen shutdown 18:00, unterscheiden sich. Es ist eigentlich das systemctlProgramm von systemd . systemctlmacht die Dinge anders.

Zunächst wird systemctldie geplante Anforderung zum Herunterfahren abgeschickt, um von einem Daemon verarbeitet zu werden, ähnlich wie in diesem atFall. Dies ist jedoch ein systemd-Daemon logind(das systemd-shutdowndDaemon wurde im Mai 2015 aus systemd entfernt, und die Änderung ist seitdem auf spätere Nebenversionen von CentOS 7 übergegangen), nicht das atSubsystem. systemctlSpricht ein internes Protokoll mit einem (systemweiten) Desktop-Bus-Broker, mit dem wiederum kommuniziertlogind .

Wie in diesem atFall gibt es also keinen shutdownProzess, der die wallNachrichten 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 atFall, aber sie werden von ausgegeben logind. Anders als in diesem atFall 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 atJobs übergeben werden können. Policy Kit wendet Regeln an, shutdowndie im Nicht-Anmeldesitzungskontext als ausgeführt werdenat Jobs, die sich von den Regeln für die shutdownAusfü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

JdeBP
quelle