Как из командной строки определить, требуется ли перезагрузка компьютера?

Когда вы устанавливаете определенные обновления (например, новое ядро) в Ubuntu Desktop, вы получаете указание на необходимость перезагрузки (в Lucid значок выхода из системы становится красным).

Как я могу проверить из командной строки, требуется ли перезагрузка сервера Ubuntu?

Я мог бы grep для "Требуется перезагрузка системы" в /etc/motd, но я бы хотел, чтобы решение было более элегантным. Кроме того, я хочу решение, которое работает в более старых версиях, например, Hardy (8,04 LTS).

10 ответов

Решение

Вы можете просто проверить, если файл /var/run/reboot-required существует или нет.

Например, любой из них скажет вам "нет такого файла" или "файл не найден", если вам не нужно перезагружаться, в противном случае (если вам нужно перезагружаться) файл будет существовать, и эти команды будут отображать информацию о файле:

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

В скрипте bash вы можете использовать:

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

В пакете debian-goodies есть команда с именем checkrestart что весьма полезно. Его вывод может помочь вам избежать полной перезагрузки.

Он сообщает, какие запущенные приложения загрузили разделяемые библиотеки, которые были обновлены во время работы приложения. Затем вы перезапускаете приложения и службы вручную и избегаете полной перезагрузки. Не помогает с обновлениями ядра, хотя.

Обычно если файл

/var/run/reboot-required 

существует, вы должны перезагрузить. Вы можете увидеть, есть ли этот файл, используя эту простую команду в gnome-terminal.

ls /var/run/reboot-required

Наряду с самыми прямыми методами, написанными другими, есть удобное указание, если вы используете byobu - набор скриптов, чтобы сделать экран GNU немного более удобным для пользователя. Он показывает набор информации в нижней части экрана, который может включать в себя информацию о необходимости перезагрузки - наряду с доступностью обновлений, временем, временем работы, используемой памятью...

На этом скриншоте вы можете увидеть из 199! в нижней строке с красным фоном доступно 199 обновлений. !! означает, что некоторые обновления безопасности. Меню на переднем плане выбирает, какие уведомления о состоянии должны отображаться.

Если требуется перезагрузка, это будет обозначено символом (R) отображается в нижней строке с белым текстом на синем фоне. Более подробную информацию и другие показатели можно прочитать на странице руководства byobu.

Если у вас установлены пакеты reboot-notifier или update-notifier-common, вы получите файлы /var/run/reboot-required и /var/run/reboot-required.pkgs

reboot-notifier является более новым в Ubuntu Wily и Xenial. Debian растягивается, но в jessie-backports

update-notifier-common Устаревший, во всех версиях Ubuntu, включая Xenial и Debian Wheezy. Не в Debian Stretch или Джесси.

(Существует некоторая предыстория для пакета reboot-notifier по адресу https://feeding.cloud.geek.nz/posts/introducing-reboot-notifier/)

Если эти пакеты не установлены, вы можете сравнить версию установленного пакета linux с запущенной версией:

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)

Здесь вы можете увидеть, что последнее установленное ядро ​​- 3.16.7-ckt20-1+deb8u4, но работает ядро ​​3.16.7-ckt20-1+deb8u3. Так что эта система нуждается в перезагрузке. U4 против U3 прямо в конце.

Возможно, вам придется прокрутить поле выше. В / proc / version важна версия ближе к концу строки.

Незначительное изменение кода версии типично для обновления ядра безопасности Debian.

needrestart

Другой вариант - установить needrestart пакет.

sudo apt-get install needrestart
sudo needrestart -k

Кажется, работает, даже если Needrestart был установлен после обновления ядра.

Я добавил следующее в мой файл.bash-aliases:

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

Казалось бы, проще, чем установить пакет для этой относительно простой задачи. Тогда я просто бегу:

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

/etc/motd файл получает информацию о том, требуется ли перезагрузка с /var/run/reboot-required файл.

Вы можете проверить содержимое этого файла в терминале, используя cat /etc/motd команда

Бедное мужское решение:

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

(Примечание: три случая квадратных скобок с пробелами внутри должны быть "[ ]".)

Если вы используете нагиос:

      ./check_file_age -i -f /var/run/reboot-required -w 86400 -c 604800

просто измените время в секундах для предупреждения/крита

Не ответ на вопрос, но предостережение относительно нескольких ответов: /var/run/reboot-required не является надежным источником необходимости перезагрузки.

Простой тест: когда новое ядро ​​станет доступным, установите его, перезагрузите компьютер. После перезагрузки запустите apt autoremove избавиться от каких-то старых, больше не требующихся ядер. После того, как вы запустите это, будет указано, что требуется перезагрузка, что является полной ерундой.

Другие вопросы по тегам