Questão 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' in /etc/motdmas 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).


219
2017-07-28 21:49


origem


Se você estiver mantendo o servidor, em breve também desenvolverá sentido, ou não, a atualização exigirá a reinicialização. A maioria das atualizações não precisa reiniciar ou apenas reiniciar o serviço (o que ele deve fazer automaticamente). - eXlin


Respostas:


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

257
2017-07-28 22:02



Isso funciona, e funciona no Hardy também. (Não funciona no Dapper - 6.06 - que eu ainda tenho em uma máquina. Resistente.) Incidentalmente, o arquivo / var / run / reboot-required é criado por /usr/share/update-notifier/ notify-reboot -requirido que é invocado a partir dos scripts do mantenedor de vários pacotes. - Marius Gedminas
Funcionaria no Dapper também se eu instalasse o pacote update-notifier, exceto que ele queria baixar o material do GNOME de 120 megas para o meu antigo servidor. - Marius Gedminas
Melhor instalar update-notifier-common, ele não depende de qualquer material GUI (mas não existe para o Dapper). - Marius Gedminas
FWIW, update-notifier-common não está instalado no servidor Lucid por padrão. - Marius Gedminas
Obrigado! e o arquivo /var/run/reboot-required.pkgs irá listar os pacotes que requerem a reinicialização. - nealmcb


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


39
2017-09-09 14:51



Como isso pode me fazer evitar uma reinicialização completa? - Oxwivi
Ele informa quais aplicativos em execução carregaram bibliotecas compartilhadas que foram atualizadas enquanto o aplicativo estava em execução. Em seguida, você reinicia os aplicativos e serviços manualmente e evita uma reinicialização completa. Não ajuda com as atualizações do kernel, no entanto. - aquaherd
Esta deve ser a melhor resposta. Muito útil. O OpenSUSE tem uma ferramenta embutida (e também ajuda você a como executá-lo). Vergonha Ubuntu só vai "reiniciar, reiniciar". Por exemplo, colord precisava de um reinício aqui. Por isso, não há necessidade de reiniciar. - Shiki
@aquaherd Comentário muito útil - pode valer a pena mudar isso para a sua resposta? - Duncan Jones


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
2017-07-28 21:59



Este arquivo não parece mais ser criado a partir do notificador de atualização comum usado para criá-lo. - Scott


Bem como os métodos mais diretos escritos por outros, há uma indicação útil se você usar Byobu - um conjunto de scripts para tornar 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 as atualizações disponíveis, a hora, o tempo de atividade, a memória usada ...

Nesta imagem você pode ver a partir do 199! na linha de fundo com o fundo vermelho que existem 199 atualizações disponíveis, eo ! 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 sobre um fundo azul. Mais detalhes e outros indicadores podem ser lidos no byobu man page.

byobu screenshot


17
2017-07-29 17:59





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

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


9
2017-07-28 21:53



update-notifier-common usado para criar isso, mas não faz mais - Scott


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:

you@somewhere:~$ rr
No reboot needed
you@somewhere:~$ 

6
2017-12-16 13:22





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

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 contexto para o pacote notificador de reinicialização 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:

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 (debian-kernel@lists.debian.org) (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 needrestart pacote.

sudo apt-get install needrestart
sudo needrestart -k

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


5
2018-03-06 21:48



Como o seu primeiro parágrafo se correlaciona com as versões do Ubuntu? - muru
Bom ponto. Obrigado. Eu passei tanto tempo testando e testando os pacotes que perdi esse pouco. Eu editei para tornar mais claro e incluir informações do pacote do Ubuntu. - Tim Bray
Novamente em 8.04, após uma atualização que exigia uma reinicialização, o Cog ficaria vermelho. Como obtenho esse comportamento de volta? - PenguinCSC
Ubuntu 14.04, eu recebo dpkg-query: no packages found matching linux-image-* - the_nuts
Unknown option: k no Ubuntu 14.04. - Cees Timmerman


Não é uma resposta para a pergunta, mas uma advertência sobre 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, não mais necessários. Depois de executar isso, ele indicará que é necessário reinicializar, o que é um absurdo completo.


-1
2017-09-14 07:09



Bem, remover um kernel re-gera seu arquivo de configuração do grub, após o qual é provavelmente uma boa idéia reiniciar, para verificar se você ainda pode inicializar. Pelo menos é assim que eu estou justificando esse (mis) recurso para mim mesmo. - Marius Gedminas