Como o systemctl agenda o encerramento do sistema?

8

Quando eu digito shutdown -h +30 , o Linux de alguma forma agenda a mudança do runlevel dentro de 30 minutos. No Debian, /sbin/shutdown é link simbólico para /bin/systemctl . Meus testes indicam que shutdown não não não use cron nem temporizadores systemd .

Como o desligamento do sistema é implementado por systemd ?

    
por patryk.beza 01.07.2015 / 02:44

1 resposta

9

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);

( systemctl.c linha 7387 )

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!

    
por 01.07.2015 / 03:28