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

215

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 servidor do Ubuntu requer uma reinicialização?

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

    
por Marius Gedminas 28.07.2010 / 23:49

8 respostas

249

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

Por exemplo, qualquer uma delas 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
    
por Weboide 29.07.2010 / 00:02
39

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

    
por aquaherd 09.09.2011 / 16:51
31

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
    
por kone4040 28.07.2010 / 23:59
17

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

Nesta captura de tela, você pode ver a partir do 199! na linha inferior com o fundo vermelho que há 199 atualizações disponíveis, e o ! 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 página man byobu .

    
por Hamish Downer 29.07.2010 / 19:59
9

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

    
por ajmitch 28.07.2010 / 23:53
5

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 corro:

you@somewhere:~$ rr
No reboot needed
you@somewhere:~$ 
    
por Capricorn1 16.12.2016 / 14:22
5

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

O

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

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

(Há alguns antecedentes para o pacote notificador de reinicialização no link )

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

tim@tramp:~$ 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)
tim@tramp:~$ 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 após o upgrade do kernel.

    
por Tim Bray 06.03.2016 / 22:48
0

Não é uma resposta à pergunta, mas uma ressalva em relação a várias das respostas: /var/run/reboot-required é não uma fonte confiável de se uma reinicialização é realmente necessária ou não.

Teste simples: quando um novo kernel se torna disponível, instale-o, reinicialize. Após a reinicialização, execute apt autoremove para se livrar de alguns kernels antigos, que não são mais necessários. Depois de executar isso, ele declarará que uma reinicialização é necessária, o que é um absurdo completo.

    
por tink 14.09.2017 / 09:09