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?

patryk.beza
la source

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!

Bertieb
la source