systemd: como verificar o horário agendado de um desligamento atrasado?

14

Eu gosto de usar as shutdown -h TIME/+DELAYvezes No entanto, desde a mudança para systemd (no Ubuntu), as coisas parecem ter mudado bastante.

Além do fato de um comando de desligamento anterior não impedir mais a execução de um novo, não consigo descobrir como verificar o tempo de desligamento planejado de um processo de desligamento atual.

Eu costumava correr ps aux | grep shutdownpara ver o tempo planejado de desligamento.

Agora, com o systemd, ele mostra algo como isto:

root      5863  0.0  0.0  13300  1988 ?        Ss   09:04   0:00 /lib/systemd/systemd-shutdownd

Como posso verificar o horário programado para o desligamento de um processo desse tipo?

Tentei shutdown -k, mas em vez de escrever apenas uma mensagem no mural, parece também alterar o tempo de desligamento programado para agora + 1 minuto.

KIAaze
fonte

Respostas:

12

man shutdown (8) diz:

O primeiro argumento pode ser uma sequência de tempo (que geralmente é "agora").

A sequência de horas pode estar no formato "hh: mm" por hora / minutos, especificando a hora em que o desligamento será executado, especificado no formato de relógio de 24 horas. Como alternativa, pode estar na sintaxe "+ m" referente ao número especificado de minutos m a partir de agora. "now" é um apelido para "+0", ou seja, para acionar um desligamento imediato. Se nenhum argumento de tempo for especificado, "+1" será implícito.

Experimentar:

# shutdown +5
# systemctl status systemd-shutdownd.service

Você deve ver algo assim:

● systemd-shutdownd.service - Delayed Shutdown Service
Loaded: loaded (/lib/systemd/system/systemd-shutdownd.service; static; vendor preset: enabled)
Active: active (running) since Tue 2015-09-15 09:13:11 UTC; 12s ago
Docs: man:systemd-shutdownd.service(8)
Main PID: 965 (systemd-shutdow)
Status: "Shutting down at Tue 2015-09-15 09:18:11 UTC (poweroff)..."
CGroup: /system.slice/systemd-shutdownd.service
       └─965 /lib/systemd/systemd-shutdownd

Status é Shutting down at Tue 2015-09-15 09:18:11 UTC (poweroff)...

Evgeny Vereshchagin
fonte
Obrigado. Essa foi fácil. Eu tentei "status de serviço" sem sucesso antes. Acho que ainda não estou acostumado a systemd o suficiente.
KIAaze
4
systemd-shutdowndfoi removido do systemd em maio de 2015.
JdeBP
Está correto. Obrigado por apontar. Se uma versão mais recente do systemd é usado, em seguida, algo como o seguinte deve ser suficiente: USECS=$(busctl get-property org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager ScheduledShutdown | cut -d ' ' -f 3); SECS=$((USECS / 1000000)); date --date=@$SECS.
precisa saber é o seguinte
9
# cat /run/systemd/shutdown/scheduled
USEC=1537242600000000
WARN_WALL=1
MODE=poweroff

O USEC é um timestamp de época unix com precisão de microssegundos, portanto:

if [ -f /run/systemd/shutdown/scheduled ]; then
  perl -wne 'm/^USEC=(\d+)\d{6}$/ and printf("Shutting down at: %s\n", scalar localtime $1)' < /run/systemd/shutdown/scheduled
fi

exibirá algo como:

Shutting down at: Tue Sep 18 03:50:00 2018

A versão do Systemd é 232-25 + deb9u4 em execução no Debian Stretch.

Delian Krustev
fonte
5

Para versões mais recentes de distribuições Linux, você pode precisar fazer:

busctl get-property org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager ScheduledShutdown

O método de funcionamento do desligamento mudou

Tentei: - Debian Stretch 9.6 - Ubuntu 18.04.1 LTS

Referências

akarapatis
fonte
2
A saída especifica o tempo de desligamento em microssegundos desde a época do Unix. Para obter um tempo legível por humanos:date -d @$(( $(busctl get-property org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager ScheduledShutdown | cut -d' ' -f3) / 1000000 ))
200_success 31/01/19
4

Encontrei a mesma pergunta e encontrei outra maneira de verificar o plano de desligamento.

Quando você define um plano de desligamento, o wall envia uma mensagem para todos os usuários logados com a permissão mesg definida como yes. Para cada chamada de parede, uma notificação será gravada no syslog . Para pesquisar o syslog , você pode executar o comando journalctl -u systemd-shutdownd, a -uopção pode filtrar o log por unidade.

Quando você executa journalctl -u systemd-shutdownd, ele mostra os detalhes do desligamento, como abaixo:

[root@dev log]# journalctl -u systemd-shutdownd
-- Logs begin at Mon 2017-06-12 09:39:34 CST, end at Mon 2017-06-12 14:05:04 CST. --
Jun 12 09:39:50 dev.local systemd[1]: Started Delayed Shutdown Service.
Jun 12 09:39:50 dev.local systemd[1]: Starting Delayed Shutdown Service...
Jun 12 09:39:50 dev.local systemd-shutdownd[1249]: Shutting down at Mon 2017-06-12 21:00:00 CST (poweroff)...
Jun 12 09:55:59 dev.local systemd-shutdownd[1249]: Shutdown canceled.
Jun 12 09:56:07 dev.local systemd[1]: Started Delayed Shutdown Service.
Jun 12 09:56:07 dev.local systemd[1]: Starting Delayed Shutdown Service...
Jun 12 09:56:07 dev.local systemd-shutdownd[2885]: Shutdown canceled.
Jun 12 11:54:15 dev.local systemd[1]: Started Delayed Shutdown Service.
Jun 12 11:54:15 dev.local systemd[1]: Starting Delayed Shutdown Service...
Jun 12 11:54:15 dev.local systemd-shutdownd[3178]: Shutting down at Mon 2017-06-12 20:00:00 CST (poweroff)...
Key Shang
fonte
1

Em um Ubuntu 18.04, o desligamento da máquina é gerenciado por systemd. Na minha máquina, ativei as reinicializações automáticas por meio de atualizações autônomas:

$ grep Automatic-Reboot /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "02:00";

O horário de reinicialização automática agendado é armazenado em /run/systemd/shutdown/scheduled.

$ cat /run/systemd/shutdown/scheduled
USEC=1563976800000000 
WARN_WALL=1
MODE=reboot

Você pode converter isso em um tempo legível por humanos usando o seguinte comando:

$ date -d "@$( awk -F '=' '/USEC/{ $2=substr($2,1,10); print $2 }' /run/systemd/shutdown/scheduled )"
Thu Jul 25 02:00:00 NZST 2019
htaccess
fonte