Detectando um cenário “plug pull” com o Linux

5

Eu queria saber se é possível detectar um desligamento devido à perda de energia em um sistema Linux. (Perda de energia definida como: pressionar o botão reset, pressionando o botão liga / desliga, puxando o cabo de alimentação) Se sim, como? (ou seja, se isso já é algo que as pessoas podem fazer, quais comandos eu executo?)

A maneira como eu imaginaria algo assim trabalhando:

  • Quando o sistema volta a funcionar, verifica se há um comando de desligamento ou reinicialização, não encontra nenhum.
  • O sistema verifica se há algum tipo de erro registrado que exija reinicialização, como kernel panic, etc (OOM talvez?) e não encontra nenhum.
  • Se nenhuma arma de fumar encontrada como descrito acima, o sistema registra algo como "Nenhuma causa para o desligamento encontrado, a perda potencial de energia detectada".
por cat pants 05.06.2014 / 01:17

2 respostas

7

Depende da sua implementação de last , mas se o seu sistema travar, você verá uma mensagem com esse efeito na saída last .

Exemplo

Observe as linhas crash ? Estes são o resultado da falta de energia ou de alguém que está pressionando o botão liga / desliga neste sistema em particular.

$ last
root     pts/0        greeneggs.bubba. Tue May 13 22:42 - 22:43  (00:01)    
reboot   system boot  2.6.18-238.19.1. Tue May 13 21:47         (4+17:29)   
root     pts/0        greeneggs.bubba. Tue May 13 21:36 - crash  (00:11)    
root     pts/0        greeneggs.bubba. Mon May 12 03:29 - 03:29  (00:00)    
root     pts/0        greeneggs.bubba. Sun May 11 16:47 - 19:41  (02:53)    
root     pts/0        greeneggs.bubba. Sat May 10 17:10 - 17:12  (00:01)    
root     pts/0        greeneggs.bubba. Sat May 10 08:35 - 08:35  (00:00)    
root     pts/1        greeneggs.bubba. Thu May  8 23:56 - 23:56  (00:00)    
reboot   system boot  2.6.18-238.19.1. Thu May  8 23:55         (9+15:21)   
root     pts/0        greeneggs.bubba. Thu May  8 22:39 - 22:41  (00:02)    
root     pts/0        greeneggs.bubba. Tue May  6 21:36 - 22:06  (00:30)    
sam      pts/0        byers.bubba.net  Tue May  6 12:36 - 13:04  (00:28)    
root     pts/0        :0.0             Mon May  5 23:12 - 23:12  (00:00)    
root     :0                            Mon May  5 23:03 - crash (3+00:51)   

Método mais esotérico

Um que eu vi usado muito bem é que se você tiver um laptop, você pode usar a ferramenta de linha de comando acpi para consultar a interface ACPI do sistema. Isso informará, entre outras coisas, quando o sistema está on-line com energia ou sem bateria.

Exemplo

Aqui está a saída desse comando no meu laptop.

$ acpi -V
Battery 0: Unknown, 94%
Battery 0: design capacity 6963 mAh, last full capacity 6683 mAh = 95%
Adapter 0: on-line
Thermal 0: ok, 52.0 degrees C
Thermal 0: trip point 0 switches to mode critical at temperature 100.0 degrees C
Thermal 0: trip point 1 switches to mode passive at temperature 95.5 degrees C
Cooling 0: LCD 0 of 15
Cooling 1: Processor 0 of 10
Cooling 2: Processor 0 of 10
Cooling 3: Processor 0 of 10
Cooling 4: Processor 0 of 10

Basta verificar o conteúdo da linha Adapter para informar o status atual do sistema. Isso poderia ser envolto em um monitor, se, por exemplo, você quisesse monitorar um grupo de máquinas para ver se eles tinham o poder cortado em grupo.

conectado

$ acpi -V | grep "Adapter"
Adapter 0: on-line

desconectado

$ acpi -V | grep "Adapter"
Adapter 0: off-line
    
por 05.06.2014 / 03:22
0

Você poderia fazer isso criando um arquivo de espaço reservado quando o sistema for desligado corretamente ou se um usuário iniciar a reinicialização (init 0 ou 6). Execute um script de inicialização (init 3 ou 5) que verifique a existência do arquivo. Se estiver faltando, não foi desligado corretamente. Se o arquivo existir (ou seja, o sistema tiver um desligamento ou reinicialização normal), basta remover o arquivo de bloqueio.

Apenas certifique-se de não gravar o arquivo de espaço reservado em um diretório que esteja montado na memória (/ dev / shm, / var / run, etc.) ou / tmp, pois esses diretórios serão esvaziados quando o sistema reinicia.

    
por 05.06.2014 / 02:30

Tags