it-swarm-pt.tech

Como posso saber, na linha de comando, se a máquina requer uma reinicialização?

Quando você instala certas atualizações (por exemplo, um novo kernel) no Ubuntu Desktop, você recebe uma indicação de que uma reinicialização é necessária (no Lucid, o ícone de logout fica vermelho).

Como posso verificar, a partir da linha de comando, se um Ubuntu servidor requer uma reinicialização?

Eu poderia grep para 'System restart required' em /etc/motd, mas gostaria de uma solução mais elegante. Além disso, quero uma solução que funcione em versões mais antigas, por exemplo Hardy (8,04 LTS).

248
Marius Gedminas

Você pode simplesmente verificar se o arquivo /var/run/reboot-required existe ou não.

Por exemplo, qualquer um deles diria "nenhum arquivo" ou "arquivo não encontrado" se você não precisar reinicializar, caso contrário (se você precisar reinicializar), o arquivo existiria e esses comandos mostrariam informações sobre o arquivo:

file /var/run/reboot-required
stat /var/run/reboot-required
ls /var/run/reboot-required

Em um script bash, você pode usar:

#!/bin/bash
if [ -f /var/run/reboot-required ]; then
  echo 'reboot required'
fi
282
Weboide

No pacote debian-goodies é um comando chamado checkrestart que é bastante útil. Sua saída pode ajudá-lo a evitar uma reinicialização completa.

Ele informa quais aplicativos em execução carregaram bibliotecas compartilhadas que foram atualizadas enquanto o aplicativo estava em execução. Você então reinicia os aplicativos e serviços manualmente e evita uma reinicialização completa. Não ajuda com as atualizações do kernel, no entanto.

44
aquaherd

Normalmente, se o arquivo

/var/run/reboot-required 

existe você deve reiniciar. Você pode ver se este arquivo está lá usando este comando simples no gnome-terminal.

ls /var/run/reboot-required
32
kone4040

Assim como os métodos mais diretos escritos por outros, há uma indicação útil se você usar byob - um conjunto de scripts para tornar a tela GNU um pouco mais fácil de usar. Ele mostra um conjunto de informações na parte inferior da tela, e isso pode incluir se uma reinicialização é necessária - juntamente com as atualizações disponíveis, o tempo de atividade, a memória usada ...

Nesta imagem você pode ver a partir do 199! na linha inferior com o fundo vermelho que existem 199 atualizações disponíveis. A !!significa que algumas são atualizações de segurança . O menu em primeiro plano está selecionando quais notificações de status devem ser exibidas.

Se uma reinicialização for necessária, isso será indicado pelo símbolo (R) exibido na barra inferior com texto branco em um plano de fundo azul. Mais detalhes e outros indicadores podem ser lidos na byobu man page .

screenshot

17
Hamish Downer

O arquivo /etc/motd obtém suas informações sobre se uma reinicialização é necessária do arquivo /var/run/reboot-required.

Você pode verificar o conteúdo deste arquivo no terminal usando o comando cat /etc/motd

9
ajmitch

Eu adicionei o seguinte ao meu arquivo .bash-aliases:

alias rr='if [ -f /var/run/reboot-required ]; then echo "reboot required"; else echo "No reboot needed"; fi'

Parecia mais simples do que instalar um pacote para essa tarefa relativamente simples. Então eu apenas corro:

[email protected]:~$ rr
No reboot needed
[email protected]:~$ 
7
Capricorn1

Se você tiver os pacotes reboot-notifier ou update-notifier-common instalados, você obterá os arquivos/var/run/reboot-required e /var/run/reboot-required.pkgs

reboot-notifier é mais recente no Ubuntu Wily e no Xenial. Trecho Debian, mas em jessie-backports

update-notifier-common É mais antigo, em todas as versões do Ubuntu, incluindo Xenial e Debian Wheezy. Não no Debian Stretch ou Jessie.

(Existe algum background para o pacote reboot-notifier em https://feeding.cloud.geek.nz/posts/introducing-reboot-notifier/ )

Se você não tiver esses pacotes instalados, poderá comparar a versão do pacote linux instalada, com a versão em execução:

[email protected]:~$ dpkg -l linux-image-*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                              Version               Architecture          Description
+++-=================================-=====================-=====================-=======================================================================
ii  linux-image-3.16.0-4-AMD64        3.16.7-ckt20-1+deb8u4 AMD64                 Linux 3.16 for 64-bit PCs
ii  linux-image-AMD64                 3.16+63               AMD64                 Linux for 64-bit PCs (meta-package)
[email protected]:~$ more /proc/version
Linux version 3.16.0-4-AMD64 ([email protected]) (gcc version 4.8.4 (Debian 4.8.4-1) ) #1 SMP Debian <b>3.16.7-ckt20-1+deb8u3</b> (2016-01-17)

Você pode ver aqui que o último kernel instalado é o 3.16.7-ckt20-1 + deb8u4, mas o kernel rodando é 3.16.7-ckt20-1 + deb8u3. Então este sistema precisa de uma reinicialização. O u4 vs u3 no final.

Você pode precisar rolar a caixa acima. Na versão/proc /, é a versão perto do final da linha que importa.

A alteração do código de versão muito pequena é típica de uma atualização do kernel de segurança da Debian.

needrestart

Outra opção é instalar o pacote needrestart.

Sudo apt-get install needrestart
Sudo needrestart -k

Parece funcionar mesmo se o needrestart foi instalado depois que o kernel foi atualizado.

7
Tim Bray

Solução do pobre homem:

#!/bin/bash
default=$(sed -n 's/^default[   ]*\([0-9][0-9]*\).*/\1/p' /boot/grub/menu.lst | tail -1)
if [ "$default" = "" ]; then default=0; fi

want=$(sed -n 's/^kernel[       ]*\/boot\/vmlinuz-\([^  ]*\).*/\1/p' /boot/grub/menu.lst | sed -n "$((default+1))p")

running=$(uname -r)

if [ "$running" = "$want" ]
then
        : OK, do nothing
else
        echo "Running $running, want $want. Reboot required."
fi

(Observe: Os três casos de colchetes com espaço em branco dentro devem ser "[<espaço> <tab>]".)

1
Enrique Perez-Terron