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

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

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

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

262
задан 14 December 2015 в 17:08

9 ответов

Вы можете просто проверить, существует ли файл /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
0
ответ дан 14 December 2015 в 17:08

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

/var/run/reboot-required 

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

ls /var/run/reboot-required
0
ответ дан 14 December 2015 в 17:08

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

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

0
ответ дан 14 December 2015 в 17:08

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

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

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

byobu screenshot

0
ответ дан 14 December 2015 в 17:08

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

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

.
0
ответ дан 14 December 2015 в 17:08

Если у вас установлены пакеты 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

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

sudo apt-get install needrestart
sudo needrestart -k

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

0
ответ дан 14 December 2015 в 17:08

Я добавил следующее в свой файл .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:~$ 
0
ответ дан 14 December 2015 в 17:08

Плохое решение:

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

0
ответ дан 14 December 2015 в 17:08

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

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

0
ответ дан 14 December 2015 в 17:08

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

Похожие вопросы: