Comment systemctl planifie-t-il l'arrêt du système?


12

Lorsque je tape shutdown -h +30, Linux planifie en quelque sorte le changement de niveau d'exécution dans les 30 minutes. Sur Debian, /sbin/shutdownest un lien symbolique vers /bin/systemctl. Mes tests indiquent que shutdownne pas utiliser ni Cron , ni minuteries systemd .

Comment l'arrêt du système est-il implémenté systemd?

Réponses:


11

Bonne question. J'ai essayé ce que je réalise maintenant que vous devez avoir essayé de planifier un arrêt et d'interroger les temporisateurs systemd!

Cela a montré que l'arrêt n'était pas dans les temporisateurs systemd, comme vous l'avez noté. Alors, une rapide lecture de la source systemctl nous donne cet appel, dans le cadre de 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);

( ligne systemctl.c 7387 )

Il semblerait donc que les arrêts soient gérés par logind. Vous pouvez continuer à rechercher les détails si vous le souhaitez login-dbus.c. Il existe des méthodes pour planifier, annuler, gérer les arrêts. Mais pour une compréhension plus approfondie, vous devrez peut-être en savoir plus sur logind / systemd que moi.

Pour faire court, les informations sur l'arrêt sont stockées (au moins) dans un fichier de planification sur /run/systemd/shutdown/scheduled, le contenu du mien à titre d'exemple était:

USEC=1435715559055789
WARN_WALL=1
MODE=poweroff

Indiquer le temps (en microsecondes, probablement); s'il faut avertir via wall, et quel mode (cf redémarrage, kexec etc).

J'espère que cela vous indique au moins dans la bonne direction!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.