A página de manual do logind.conf diz:
IdleAction=
Configura a ação a ser tomada quando o sistema está ocioso. Toma um de "ignore", "poweroff", "reboot", "halt", "kexec", "suspend", "hibernate", "hybrid-sleep", "suspend-then-hibernate" e "lock". O padrão é "ignorar".
Não vi o kexec
valor explicado em lugar nenhum. O que exatamente faz kexec
aqui?
Existe uma kexec(8)
linha de comando equivalente que ele executa?
Em que casos seria útil reiniciar a quente em um novo kernel no sistema ocioso de qualquer maneira?
Sim, existe uma
kexec
ferramenta de linha de comando que você pode usarkexec
em um novo kernel.Do ponto de vista do usuário, usar
kexec
é quase o mesmo que usarreboot
, exceto que tende a ser mais rápido, pois o kernel atual carrega o novo e começa a executá-lo (ignorando BIOS, firmware, carregador de inicialização, etc.)O objetivo do logind oferecer ações ociosas como "kexec" (ou "reboot") é ajudar a manter seu sistema sempre atualizado, o que para atualizações de kernel normalmente precisa de uma reinicialização. A detecção de inatividade ajuda a descobrir quando seria um bom momento para reinicializar seu sistema (espero que não cause uma interrupção muito grande) e reinicializá-lo com frequência (supondo que esteja ocioso com frequência suficiente) garantirá que ele inicialize em um novo kernel não muito tempo após o gerenciador de pacotes instalar um atualizado.
É claro que é uma configuração com a qual nem todos os usuários concordam, então é claro que não é a configuração padrão para esta opção (o padrão é "ignorar" que não faz nada ...)
Para entender exatamente o que a
kexec
ação aciona, você pode começar a olhar parasystemctl kexec
, que é um paralelo asystemctl reboot
. Sua documentação diz:Então isso passa por um kexec.target especial , que normalmente é configurado para exigir um systemd-kexec.service , que então chama a
/usr/lib/systemd/systemd-shutdown
ferramenta com umkexec
argumento (através de umsystemctl --force kexec
, acontece...).Para ir mais longe, você precisa olhar o código-fonte e verá que
systemd-shutdown kexec
simplesmente tentará reinicializar usandokexec -e
, com lógica para retornar a uma reinicialização "normal" se isso falhar.Olhando para a página de manual do kexec(8) , você verá que
kexec -e
é tudo o que é necessário para executar uma reinicialização do kexec, então isso é tudo com que o systemd se integra.A outra parte que está faltando é a parte que carrega o kernel de inicialização na memória, a parte que executa o
kexec -l
para que a execução real funcione. Essa é outra toca de coelho a seguir. Sugiro isso como um exercício para o leitor (ou talvez bastante apropriado para uma pergunta separada aqui na U&L!)