Когда вы устанавливаете определенные обновления (например, новое ядро) в Ubuntu Desktop, вы получаете указание на необходимость перезагрузки (в Lucid значок выхода из системы становится красным).
Как я могу проверить из командной строки, требуется ли перезагрузка серверу Ubuntu ?
Я мог бы найти «Требуется перезагрузка системы» в /etc/motd
, но Мне нравится решение, которое более элегантно. Кроме того, я хочу решение, которое работает в старых версиях, например, Харди (8,04 LTS).
Вы можете просто проверить, существует ли файл /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
Обычно, если файл
/var/run/reboot-required
существует, вы должны перезагрузиться. Вы можете увидеть, есть ли этот файл, используя эту простую команду в gnome-terminal.
ls /var/run/reboot-required
В пакете debian-goodies есть команда с именем checkrestart
, которая весьма полезна. Его вывод может помочь вам избежать полной перезагрузки.
Он сообщает, какие запущенные приложения загрузили разделяемые библиотеки, которые были обновлены во время работы приложения. Затем вы перезапускаете приложения и службы вручную и избегаете полной перезагрузки. Однако не помогает с обновлением ядра.
Кроме самых прямых методов, написанных другими, есть удобное указание, если вы используете byobu - набор скриптов, чтобы сделать экран GNU немного более удобным для пользователя. Он показывает набор информации в нижней части экрана, который может включать в себя информацию о необходимости перезагрузки, а также о наличии обновлений, времени, времени работы, используемой памяти ...
На этом скриншоте вы можете видеть из 199!
в нижней строке с красным фоном, что доступно 199 обновлений, а !
означает, что некоторые из них являются обновлениями безопасности. Меню на переднем плане выбирает, какие уведомления о состоянии должны отображаться.
Если требуется перезагрузка, это будет обозначено символом (R)
, отображаемым в нижней строке белым текстом на синем фоне. Более подробную информацию и другие индикаторы можно прочитать на справочной странице byobu .
Файл /etc/motd
получает информацию о том, требуется ли перезагрузка из файла /var/run/reboot-required
.
Вы можете проверить содержимое этого файла в терминале с помощью команды cat /etc/motd
Если у вас установлены пакеты reboot-notifier или update-notifier-common, вы получаете файлы / var / run / reboot-required и /var/run/reboot-required.pkgs
[ 1115] reboot-notifier новее в Ubuntu Wily и Xenial. Debian растягивается, но в jessie-backports
update-notifier-common Старее, во всех версиях Ubuntu, включая Xenial и Debian Wheezy. Не в Debian Stretch или Джесси.
(Некоторые сведения о пакете уведомлений о перезагрузке см. На странице https://feeding.cloud.geek.nz/posts/introduction-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 (debian-kernel@lists.debian.org) (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
.
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:~$
Плохое решение:
#!/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
(Примечание: три случая квадратных скобок с пробелами внутри должны быть "[< space > < tab >]".)
Не ответ на вопрос, а предостережение относительно нескольких ответов: /var/run/reboot-required
не не надежный источник того, действительно ли требуется перезагрузка.
Простой тест: когда новое ядро станет доступным, установите его, перезагрузите компьютер. После перезагрузки запустите apt autoremove
, чтобы избавиться от некоторых старых, больше не требующихся ядер. После того, как вы запустите это, будет указано, что требуется перезагрузка, что является полной чепухой.