web-dev-qa-db-fra.com

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

Quand je tape shutdown -h +30, Linux d'une manière ou d'une autre planche les changements de Runlevel dans les 30 minutes. Sur Debian, /sbin/shutdown est un lien symbolique à /bin/systemctl. Mes tests indiquent que shutdown fait non Utilisez ni cron ni - minuteries Systemd .

Comment l'arrêt du système est-il mis en œuvre par systemd?

12
patryk.beza

Bonne question. J'ai essayé ce que je réalise maintenant que vous devez avoir essayé - planifier une fermeture et interrogez les minuteries SystemD!

Cela a montré que l'arrêt n'était pas dans les minuteries SystemD, comme vous l'avez noté. Ainsi, une pérusée rapide 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);

( SystemCtL.con ligne 7387 )

Il semblerait donc que les arrêts soient traités par logind . Vous pouvez continuer à poursuivre les détails si vous le souhaitez - voir login-dbus.c . Il existe des méthodes pour la planification, l'annulation, la gestion des arrêts. Mais pour une compréhension plus profonde, vous devrez peut-être en savoir plus sur la connexion/SystemD que moi.

Histoire longue courte, les informations d'arrêt sont stockées (au moins) dans un fichier de planification à /run/systemd/shutdown/scheduled, le contenu de la mienne comme exemple:

USEC=1435715559055789
WARN_WALL=1
MODE=poweroff

Indiquant le temps (en microsecondes, vraisemblablement); s'avérer avertir via wall et quel mode (redémarrez cf, kexec, etc.).

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

11
bertieb