Гарне питання. Я спробував те, що тепер розумію, що ви, мабуть, спробували запланувати відключення та запитати системні таймери!
Це показало, що відключення не було в системних таймерах, як ви зазначали. Тож швидке вивчення джерела systemctl дає нам цей виклик, як частина 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 рядок 7387 )
Тому, здавалося б, відключеннями обробляються logind
. Ви можете продовжувати шукати деталі, якщо хочете - див login-dbus.c
. Існують методи для планування, скасування, управління відключеннями. Але для глибшого розуміння вам може знадобитися більше знати про logind / systemd, ніж я.
Коротше кажучи, інформація про вимкнення зберігається (принаймні) у файлі розкладу на /run/systemd/shutdown/scheduled
, вміст шахти як приклад:
USEC=1435715559055789
WARN_WALL=1
MODE=poweroff
Вказівка часу (у мікросекундах, імовірно); чи попереджати через wall
і в якому режимі (cf перезапуск, kexec тощо).
Сподіваємось, це принаймні направить вас у правильному напрямку!