it-swarm.it

Come posso sapere, dalla riga di comando, se la macchina richiede un riavvio?

Quando installi determinati aggiornamenti (ad es. Un nuovo kernel) in Ubuntu Desktop, ricevi un'indicazione che è necessario un riavvio (in Lucid, l'icona di logout diventa rossa).

Come posso verificare, dalla riga di comando, se un Ubuntu server richiede un riavvio?

Potrei richiedere "Riavvio del sistema richiesto" in /etc/motd, ma vorrei una soluzione più elegante. Inoltre, voglio una soluzione che funzioni con versioni precedenti, ad es. Hardy (8.04 LTS).

250
Marius Gedminas

Puoi semplicemente controllare se il file /var/run/reboot-required esiste o no.

Ad esempio, uno qualsiasi di questi ti direbbe "nessun file di questo tipo" o "file non trovato" se non è necessario riavviare, altrimenti (se è necessario riavviare) il file esisterebbe e questi comandi mostrerebbero informazioni sul file:

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

In uno script bash, puoi usare:

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

Nel pacchetto debian-goodies c'è un comando chiamato checkrestart che è abbastanza utile. Il suo output può aiutarti a evitare un riavvio completo.

Indica quali applicazioni in esecuzione hanno caricato librerie condivise che sono state aggiornate mentre l'applicazione era in esecuzione. Quindi riavviare le applicazioni e i servizi manualmente ed evitare un riavvio completo. Tuttavia, non aiuta con gli aggiornamenti del kernel.

44
aquaherd

Normalmente se il file

/var/run/reboot-required 

esiste che è necessario riavviare. Puoi vedere se questo file è presente usando questo semplice comando in gnome-terminal.

ls /var/run/reboot-required
33
kone4040

Oltre ai metodi più diretti scritti da altri, c'è un'utile indicazione se usi byob - una serie di script per rendere lo schermo GNU un po 'più user friendly. Mostra una serie di informazioni nella parte inferiore dello schermo e può includere l'eventuale necessità di un riavvio, oltre alla disponibilità di aggiornamenti, l'ora, il tempo di attività, la memoria utilizzata ...

In questo screenshot puoi vedere da 199! sulla riga inferiore con lo sfondo rosso che sono disponibili 199 aggiornamenti. A !!significa che alcuni sono aggiornamenti di sicurezza . Il menu in primo piano seleziona quali notifiche di stato devono essere visualizzate.

Se è necessario un riavvio, questo verrà indicato dal simbolo (R) visualizzato nella barra inferiore con testo bianco su sfondo blu. Maggiori dettagli e altri indicatori possono essere letti nella pagina man byob .

screenshot

17
Hamish Downer

Il file /etc/motd ottiene le informazioni sulla necessità di riavviare il file /var/run/reboot-required.

Puoi controllare il contenuto di questo file nel terminale usando il comando cat /etc/motd

9
ajmitch

Ho aggiunto quanto segue al mio file .bash-aliases:

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

Sembrava più semplice dell'installazione di un pacchetto per questa attività relativamente semplice. Quindi corro:

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

Se hai i pacchetti reboot-notifier o update-notifier-common installati, ottieni i file/var/run/reboot-required e /var/run/reboot-required.pkgs

reboot-notifier è più recente in Ubuntu Wily e Xenial. Tratto Debian, ma in jessie-backport

update-notifier-common È più vecchio, in tutte le versioni di Ubuntu tra cui Xenial e Debian Wheezy. Non in Debian Stretch o Jessie.

(Esiste un po 'di background nel pacchetto reboot-notifier su https://feeding.cloud.geek.nz/posts/introducing-reboot-notifier/ )

Se non hai installato questi pacchetti, puoi confrontare la versione del pacchetto Linux installata con la versione in esecuzione:

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

Qui puoi vedere che l'ultimo kernel installato è 3.16.7-ckt20-1 + deb8u4 ma il kernel in esecuzione è 3.16.7-ckt20-1 + deb8u3. Quindi questo sistema ha bisogno di un riavvio. L'U4 contro l'U3 proprio alla fine.

Potrebbe essere necessario scorrere la casella sopra. Nella versione/proc /, è la versione vicino alla fine della riga che conta.

La modifica del codice della versione molto piccola è tipica di un aggiornamento del kernel di sicurezza Debian.

needrestart

Un'altra opzione è installare il pacchetto needrestart.

Sudo apt-get install needrestart
Sudo needrestart -k

Sembra funzionare anche se needrestart è stato installato dopo l'aggiornamento del kernel.

7
Tim Bray

Povera soluzione dell'uomo:

#!/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

(Nota: i tre casi di parentesi quadre con spazi bianchi all'interno dovrebbero essere "[<space> <tab>]".)