Як я можу в командному рядку дізнатися, чи потрібна машина перезавантаження?


256

Встановлюючи певні оновлення (наприклад, нове ядро) в Ubuntu Desktop, ви отримуєте вказівку на необхідність перезавантаження (у Lucid, значок виходу стає червоним).

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

Я міг би похвалитись за "Необхідний перезапуск системи" /etc/motd, але я хотів би отримати більш елегантне рішення. Також я хочу рішення, яке працює в старих випусках, наприклад, Hardy (8,04 LTS).


Якщо ви підтримуєте сервер, то незабаром також з'явиться сенс, якщо він не працює або не оновлення вимагає перезавантаження. Більшість оновлень не потребують перезавантаження або лише перезавантаження служби (це повинно робитись автоматично).
eXlin

Відповіді:


289

Ви можете просто перевірити, чи файл /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

1
Це працює, і він працює і на Харді. (Не працює на Dapper - 6.06 - який я все ще маю на одній машині. Важко.) Між іншим, файл / var / run / reboot необхідний файл створюється / usr / share / update-notifier / notify-reboot. -потрібна, яка викликається з сценаріїв обслуговування різних пакетів.
Маріус Гедмінас

2
Він би працював і на Dapper, якби я встановив пакет оновлень-сповіщувачів, за винятком того, що він хоче знищити 120 мегів на GNOME на мій стародавній сервер.
Маріус Гедмінас

10
Краще встановити поширене оновлення-сповіщувач, воно не залежить від GUI (але воно не існує для Dapper).
Маріус Гедмінас

1
FWIW, update-notifier-common не встановлено на сервері Lucid за замовчуванням.
Маріус Гедмінас

5
Дякую! і файл /var/run/reboot-required.pkgsперелічить пакунки, які потребують перезавантаження.
nealmcb

44

У пакеті debian-goodies є команда з ім'ям, checkrestartяка є досить корисною. Його вихід може допомогти вам уникнути повного перезавантаження.

Він повідомляє вам, які запущені програми завантажували спільні бібліотеки, які були оновлені під час роботи програми. Потім ви перезавантажте програми та служби вручну і уникнете повного перезавантаження. Не допомагає оновлення ядра.


1
Як змусити мене уникати повного перезавантаження?
Oxwivi

11
Він повідомляє вам, які запущені програми завантажували спільні бібліотеки, які були оновлені під час роботи програми. Потім ви перезавантажте програми та служби вручну і уникнете повного перезавантаження. Не допомагає оновлення ядра.
aquaherd

Це має бути головна відповідь. Дуже корисний. OpenSUSE отримав вбудований інструмент (а також допоможе вам як його запустити). Сором Ubuntu просто йде "перезапустити, перезапустити". Наприклад, colord тут потребував перезавантаження. Отже, не потрібно перезапускати.
Шики

@aquaherd Дуже корисний коментар - можливо, варто перенести це у вашу відповідь?
Дункан Джонс

33

Зазвичай, якщо файл

/var/run/reboot-required 

існує, вам слід перезавантажити. Ви можете побачити, чи є цей файл, використовуючи цю просту команду в gnome-terminal.

ls /var/run/reboot-required

Цей файл, схоже, більше не створюється із розповсюдженого повідомлення-оновлення, який використовувався для його створення.
Скотт

17

Як і найбільш прямі методи, написані іншими, є зручна вказівка, якщо ви використовуєте bybu - набір сценаріїв, щоб зробити екран GNU трохи більш зручним для користувачів. Він показує набір інформації в нижній частині екрана, і він може включати, чи потрібно перезавантаження - разом з тим, чи доступні оновлення, час, час роботи, об'єм пам'яті ...

На цьому знімку з 199!нижнього рядка з червоним фоном ви бачите, що доступно 199 оновлень. Це !! означає, що деякі - це оновлення безпеки . У меню на передньому плані вибирається, яке сповіщення про стан має відображатися.

Якщо потрібна перезавантаження, це буде позначено символом, (R)відображеним у нижній смузі з білим текстом на синьому тлі. Більш детально та інші показники можна прочитати на сторінці byobu man .

скріншот


9

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

Ви можете перевірити вміст цього файлу в терміналі за допомогою cat /etc/motdкоманди


update-notifier-поширений, який використовується для створення цього, але вже не
Скотт,

8

Якщо у вас встановлені загальні пакети перезавантаження або сповіщення оновлення-сповіщувача, ви отримуєте необхідні файли / var / run / reboot та /var/run/reboot-required.pkgs

перезавантаження-сповіщувач новіший у Ubuntu Wily та Xenial. Debian стрейч, але в джессі

update-notifier-common Старіший у всіх версіях Ubuntu, включаючи Xenial та Debian Wheezy. Не в Debian Stretch або Jessie.

(Існує деякий фон у пакеті перезавантаження-сповіщувача за адресою 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 (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 vs u3 в кінці.

Можливо, вам потрібно буде прокрутити поле вище. У версії / proc / версія важлива саме версія в кінці рядка.

Сама незначна зміна коду версії характерна для оновлення ядра безпеки Debian.

needrestart

Ще один варіант - встановити needrestartпакет.

sudo apt-get install needrestart
sudo needrestart -k

Здається, працює навіть у тому випадку, якщо після оновлення ядра було встановлено needrestart.


1
Як ваш перший абзац співвідноситься з версіями Ubuntu?
муру

Влучне зауваження. Дякую. Я так довго пробував тестування та пробуючи пакунки, які я пропустив. Я відредагував, щоб зробити більш зрозумілим і включити інформацію про пакет ubuntu.
Тім Брей

Знову 8.04, після оновлення, яке вимагало перезавантаження, Cog стане червоним. Як мені повернути таку поведінку?
PenguinCSC

Ubuntu 14.04, я отримуюdpkg-query: no packages found matching linux-image-*
the_nuts

Unknown option: kв Ubuntu 14.04.
Cees Timmerman

7

Я додав у свій файл .bash-псевдоніми таке:

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

1

Погане чоловіче рішення:

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


grub 2 більше не використовує /boot/grub/menu.lst, це /boot/grub/grub.cfg зараз.
Маріус Гедмінас

-1

Чи не відповідь на це питання, але застереження в відношенні дещо відповідей: /var/run/reboot-requiredце НЕ є надійним джерелом є на самому ділі не потрібне перезавантаження.

Простий тест: коли нове ядро ​​стане доступним, встановіть його, перезавантажте. Після перезавантаження запустіть, apt autoremoveщоб позбутися деяких старих, вже не потрібних ядер. Після цього ви запустили, що потрібно перезавантажити, що є повною нісенітницею.


3
Добре, видалення ядра повторно генерує ваш конфігураційний файл grub, після чого, ймовірно, добре перезавантажити, щоб переконатися, що ви все ще можете завантажуватись. Принаймні так я виправдовую цю (помилкову) особливість собі.
Маріус Гедмінас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.