Buona domanda. Ho provato quello che ora mi rendo conto che dovevi aver provato: programmare un arresto e interrogare i timer di systemd!
Ciò ha dimostrato che l'arresto non era nei timer di systemd, come hai notato. Quindi una rapida lettura della fonte systemctl ci dà questa chiamata, come parte di 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.c linea 7387 )
Quindi sembrerebbe che gli arresti vengano gestiti logind
. Puoi continuare a perseguire i dettagli se vuoi, vedi login-dbus.c
. Esistono metodi per programmare, annullare, gestire gli arresti. Ma per una comprensione più profonda, potresti aver bisogno di sapere di più su logind / systemd di me.
Per farla breve, le informazioni di spegnimento sono memorizzate (almeno) in un file di pianificazione all'indirizzo /run/systemd/shutdown/scheduled
, i miei contenuti come esempio erano:
USEC=1435715559055789
WARN_WALL=1
MODE=poweroff
Indicare il tempo (in microsecondi, presumibilmente); se avvisare tramite wall
e quale modalità (vedi riavvio, kexec ecc.).
Spero che questo ti indichi almeno nella giusta direzione!