Cuando instala ciertas actualizaciones (por ejemplo, un nuevo núcleo) en Ubuntu Desktop, obtiene una indicación de que es necesario reiniciar (en Lucid, el icono de cierre de sesión se vuelve rojo).
¿Cómo puedo verificar, desde la línea de comandos, si un Ubuntu servidor requiere un reinicio?
Podría buscar 'Reinicio del sistema requerido' en /etc/motd
, pero me gustaría una solución que sea más elegante. Además, quiero una solución que funcione en versiones anteriores, p. Hardy (8.04 LTS).
Simplemente puede verificar si el archivo /var/run/reboot-required
existe o no.
Por ejemplo, cualquiera de estos le diría "no existe tal archivo" o "archivo no encontrado" si no necesita reiniciar, de lo contrario (si necesita reiniciar) el archivo existiría y estos comandos mostrarían información sobre el archivo:
file /var/run/reboot-required
stat /var/run/reboot-required
ls /var/run/reboot-required
En un script bash, puedes usar:
#!/bin/bash
if [ -f /var/run/reboot-required ]; then
echo 'reboot required'
fi
En el paquete debian-goodies hay un comando llamado checkrestart
que es bastante útil. Su salida puede ayudarlo a evitar un reinicio completo.
Le indica qué aplicaciones en ejecución han cargado bibliotecas compartidas que se actualizaron mientras se ejecutaba la aplicación. Luego reinicia las aplicaciones y servicios manualmente y evita un reinicio completo. Sin embargo, no ayuda con las actualizaciones del kernel.
Normalmente si el archivo
/var/run/reboot-required
existe, debe reiniciar. Puede ver si este archivo está allí usando este comando simple en gnome-terminal.
ls /var/run/reboot-required
Además de los métodos más directos escritos por otros, hay una indicación útil si usa byob - un conjunto de scripts para hacer que GNU pantalla sea un poco más fácil de usar. Muestra un conjunto de información en la parte inferior de la pantalla, y eso puede incluir si se requiere un reinicio, junto con si hay actualizaciones disponibles, el tiempo, el tiempo de actividad, la memoria utilizada ...
En esta captura de pantalla, puede ver desde 199!
en la línea inferior con el fondo rojo que hay 199 actualizaciones disponibles. Un !!
significa que algunas son actualizaciones de seguridad . El menú en primer plano selecciona qué notificaciones de estado se deben mostrar.
Si se requiere reiniciar, esto se indicará con el símbolo (R)
que se muestra en la barra inferior con texto blanco sobre fondo azul. Se pueden leer más detalles y otros indicadores en byobu man page .
El archivo /etc/motd
obtiene su información sobre si es necesario reiniciar desde el archivo /var/run/reboot-required
.
Puede verificar el contenido de este archivo en la terminal utilizando el comando cat /etc/motd
Agregué lo siguiente a mi archivo .bash-aliases:
alias rr='if [ -f /var/run/reboot-required ]; then echo "reboot required"; else echo "No reboot needed"; fi'
Parecía más simple que instalar un paquete para esta tarea relativamente simple. Entonces solo corro:
[email protected]:~$ rr
No reboot needed
[email protected]:~$
Si tiene instalados los paquetes reboot-notifier o update-notifier-common, obtendrá los archivos/var/run/reboot-required y /var/run/reboot-required.pkgs
reboot-notifier es más nuevo en Ubuntu Wily y Xenial. Estiramiento de Debian, pero en jessie-backports
update-notifier-common Es anterior, en todas las versiones de Ubuntu, incluidas Xenial y Debian Wheezy. No en Debian Stretch o Jessie.
(Hay algunos antecedentes del paquete reboot-notifier en https://feeding.cloud.geek.nz/posts/introducing-reboot-notifier/ )
Si no tiene estos paquetes instalados, puede comparar la versión del paquete de Linux instalada, con la versión en ejecución:
[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)
Puede ver aquí que el último kernel instalado es 3.16.7-ckt20-1 + deb8u4 pero el kernel en ejecución es 3.16.7-ckt20-1 + deb8u3. Entonces este sistema necesita un reinicio. El u4 vs u3 justo al final.
Es posible que deba desplazarse por el cuadro de arriba. En la versión/proc /, lo que importa es la versión cerca del final de la línea.
El cambio de código de versión menor es típico de una actualización del núcleo de seguridad de Debian.
Otra opción es instalar el paquete needrestart
.
Sudo apt-get install needrestart
Sudo needrestart -k
Parece funcionar incluso si se necesita reiniciar después de actualizar el kernel.
La solución del pobre hombre:
#!/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
(Aviso: los tres casos de corchetes con espacio en blanco en el interior deben ser "[<space> <tab>]").