Wie plant systemctl das Herunterfahren des Systems?

12

Wenn ich shutdown -h +30tippe, plant Linux die Änderung des Runlevels innerhalb von 30 Minuten. Auf Debian /sbin/shutdownist symbolischer Link zu /bin/systemctl. Meine Tests zeigen , dass shutdownsich nicht weder verwenden cron noch systemd Timer .

Wie wird das Herunterfahren des Systems von implementiert systemd?

patryk.beza
quelle

Antworten:

11

Gute Frage. Ich habe versucht, was mir jetzt klar ist, dass Sie versucht haben müssen, ein Herunterfahren zu planen und die System-Timer abzufragen!

Das hat gezeigt, dass das Herunterfahren nicht in den System-Timern war, wie Sie bemerkt haben. Eine schnelle Durchsicht der systemctl-Quelle gibt uns diesen Aufruf als Teil von halt_main():

r = sd_bus_call_method(
                       b,
                       "org.freedesktop.login1",
                       "/org/freedesktop/login1",
                       "org.freedesktop.login1.Manager",
                       "ScheduleShutdown",
                       &error,
                       NULL,
                       "st",
                       arg_action == ACTION_HALT     ? "halt" :
                       arg_action == ACTION_POWEROFF ? "poweroff" :
                       arg_action == ACTION_KEXEC    ? "kexec" :
                                                       "reboot",
                       arg_when);

( systemctl.c Zeile 7387 )

Es scheint also, dass Abschaltungen von behandelt werden logind. Sie können die Details weiter verfolgen, wenn Sie möchten login-dbus.c. Dort gibt es Methoden zum Planen, Abbrechen und Verwalten von Abschaltungen. Für ein tieferes Verständnis müssen Sie möglicherweise mehr über logind / systemd wissen als ich.

Kurz gesagt, die Informationen zum Herunterfahren werden (zumindest) in einer Zeitplandatei gespeichert /run/systemd/shutdown/scheduled. Der Inhalt von mir als Beispiel war:

USEC=1435715559055789
WARN_WALL=1
MODE=poweroff

Anzeige der Zeit (vermutlich in Mikrosekunden); ob über wallund in welchem ​​Modus gewarnt werden soll (vgl. Neustart, Kexec usw.).

Hoffe das weist dich zumindest in die richtige Richtung!

Bertieb
quelle