it-swarm.dev

¿Cómo puedo saber, desde la línea de comandos, si la máquina requiere un reinicio?

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

248
Marius Gedminas

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
283
Weboide

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.

44
aquaherd

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
33
kone4040

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 .

screenshot

17
Hamish Downer

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

9
ajmitch

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]:~$ 
7
Capricorn1

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.

reinicio

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.

7
Tim Bray

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

1