Boa pergunta. Eu tentei o que agora percebo que você deve ter tentado - programar um desligamento e consultar os cronômetros do systemd!
Isso mostrou que o desligamento não estava nos temporizadores do sistema, como você observou. Então, 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);
Portanto, parece que os desligamentos são tratados por logind
. Você pode continuar a buscar os detalhes se quiser ver login-dbus.c
. Existem métodos para agendamento, cancelamento, gerenciamento de 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 planejamento em /run/systemd/shutdown/scheduled
, o conteúdo do meu como exemplo:
USEC=1435715559055789
WARN_WALL=1
MODE=poweroff
Tempo de indicação (em microssegundos, presumivelmente); se deve avisar via wall
e qual modo (cf restart, kexec etc).
Espero que você esteja no caminho certo, pelo menos!