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).
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
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.
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
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 .
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
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:~$
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.
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.
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>]".)