¿Cómo programa systemctl el apagado del sistema?

Respuestas:

11

Buena pregunta. Intenté lo que ahora me doy cuenta de que debes haber intentado: programar un apagado y consultar los temporizadores del sistema.

Eso demostró que el apagado no estaba en los temporizadores del sistema, como notó. Entonces, una lectura rápida de la fuente systemctl nos da esta llamada, 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);

( systemctl.c línea 7387 )

Por lo tanto, parece que los cierres son manejados por logind. Puede continuar buscando los detalles si lo desea: vea login-dbus.c. Existen métodos para programar, cancelar y administrar paradas. Pero para una comprensión más profunda, es posible que necesite saber más sobre logind / systemd que yo.

En pocas palabras, la información de apagado se almacena (al menos) en un archivo de programación en /run/systemd/shutdown/scheduled, los contenidos míos como ejemplo fueron:

USEC=1435715559055789
WARN_WALL=1
MODE=poweroff

Indicando el tiempo (en microsegundos, presumiblemente); si se debe advertir a través de wally qué modo (cf reiniciar, kexec, etc.).

¡Espero que esto te señale en la dirección correcta al menos!

bertieb
fuente