web-dev-qa-db-fra.com

Comment savoir, à partir de la ligne de commande, si la machine nécessite un redémarrage?

Lorsque vous installez certaines mises à jour (par exemple, un nouveau noyau) dans Ubuntu Desktop, vous recevez l’indication qu’un redémarrage est requis (dans Lucid, l’icône de déconnexion devient rouge).

Comment puis-je vérifier, à partir de la ligne de commande, si Ubuntu serveur nécessite un redémarrage?

Je pourrais grep pour "Redémarrage du système requis" dans /etc/motd, mais j'aimerais une solution plus élégante. De plus, je souhaite une solution qui fonctionne dans les versions antérieures, par exemple. Hardy (8.04 LTS).

248
Marius Gedminas

Vous pouvez simplement vérifier si le fichier /var/run/reboot-required existe ou non.

Par exemple, n'importe lequel de ceux-ci vous dirait "aucun fichier de ce type" ou "fichier introuvable" si vous n'avez pas besoin de redémarrer, sinon (si vous devez redémarrer), le fichier existerait et ces commandes afficheraient des informations sur le fichier:

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

Dans un script bash, vous pouvez utiliser:

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

Dans le paquet debian-goodies se trouve une commande nommée checkrestart qui est très utile. Sa sortie peut vous aider à éviter un redémarrage complet.

Il vous indique quelles applications en cours ont chargé des bibliothèques partagées mises à niveau pendant l'exécution de l'application. Vous redémarrez ensuite les applications et les services manuellement et évitez un redémarrage complet. N'aide pas avec les mises à niveau du noyau, cependant.

44
aquaherd

Normalement si le fichier

/var/run/reboot-required 

existe vous devez redémarrer. Vous pouvez voir si ce fichier est là en utilisant cette commande simple dans gnome-terminal.

ls /var/run/reboot-required
32
kone4040

Outre les méthodes les plus directes écrites par d'autres utilisateurs, il existe une indication pratique si vous utilisez byob - un ensemble de scripts permettant de rendre GNU screen un peu plus convivial. Il affiche un ensemble d'informations en bas de l'écran, qui peut indiquer si un redémarrage est requis - avec la disponibilité des mises à jour, la durée, la disponibilité, la mémoire utilisée, etc.

Sur cette capture d'écran, vous pouvez voir à partir du 199! sur la ligne inférieure avec l'arrière-plan rouge qu'il y a 199 mises à jour disponibles. Un !!signifie que certaines sont des mises à jour de sécurité . Le menu au premier plan sélectionne les notifications d'état à afficher.

Si un redémarrage est requis, cela sera indiqué par le symbole (R) affiché dans la barre inférieure avec du texte blanc sur un fond bleu. Plus de détails et d’autres indicateurs peuvent être lus dans la page de manuel de byob .

screenshot

17
Hamish Downer

Le fichier /etc/motd obtient ses informations pour savoir si un redémarrage est requis à partir du fichier /var/run/reboot-required.

Vous pouvez vérifier le contenu de ce fichier dans Terminal en utilisant la commande cat /etc/motd

9
ajmitch

J'ai ajouté ce qui suit à mon fichier .bash-aliases:

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

Cela semblait plus simple que d'installer un paquet pour cette tâche relativement simple. Alors je cours juste:

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

Si les packages reboot-notifier ou update-notifier-common sont installés, vous obtenez les fichiers/var/run/reboot-required et /var/run/reboot-required.pkgs.

reboot-notifier est plus récent dans Ubuntu Wily et Xenial. Tronçon Debian, mais dans jessie-backports

update-notifier-common Est plus ancien, dans toutes les versions d'Ubuntu, y compris Xenial et Debian Wheezy. Pas dans Debian Stretch ou Jessie.

(Le paquet reboot-notifier a quelques informations de base sur https://feeding.cloud.geek.nz/posts/introducing-reboot-notifier/ )

Si ces packages ne sont pas installés, vous pouvez comparer la version du package linux installée à la version en cours d'exécution:

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)

Vous pouvez voir ici que le dernier noyau installé est 3.16.7-ckt20-1 + deb8u4 mais que le noyau en cours d'exécution est 3.16.7-ckt20-1 + deb8u3. Donc, ce système a besoin d'un redémarrage. Le U4 vs U3 à la fin.

Vous devrez peut-être faire défiler la case ci-dessus. Dans/proc/version, c'est la version proche de la fin de la ligne qui compte.

Le changement de code de version très mineur est typique d'une mise à jour du noyau de sécurité Debian.

besoin de redémarrer

Une autre option consiste à installer le package needrestart.

Sudo apt-get install needrestart
Sudo needrestart -k

Semble fonctionner même si needrestart a été installé après la mise à niveau du noyau.

7
Tim Bray

La solution du pauvre:

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

(Remarque: les trois cas de crochets contenant des espaces doivent être "[<espace> <tab>]".)

1