Boa pergunta. Tentei o que agora percebo que você deve ter tentado - agendar um desligamento e consultar os temporizadores do systemd!
Isso mostrou que o desligamento não estava nos temporizadores do systemd, como você observou. Portanto, uma rápida leitura da fonte systemctl nos dá essa chamada, como parte 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);
( linha systemctl.c 7387 )
Portanto, parece que os desligamentos são tratados logind
. Você pode continuar buscando os detalhes, se quiser login-dbus.c
. Existem métodos para agendar, cancelar e gerenciar desligamentos. Mas, para uma compreensão mais profunda, talvez você precise saber mais sobre logind / systemd do que eu.
Para encurtar a história, as informações de desligamento são armazenadas (pelo menos) em um arquivo de agendamento em /run/systemd/shutdown/scheduled
, o conteúdo do meu como exemplo:
USEC=1435715559055789
WARN_WALL=1
MODE=poweroff
Indicando tempo (em microssegundos, presumivelmente); se deve avisar via wall
e qual modo (cf restart, kexec etc).
Espero que isso aponte a direção certa, pelo menos!