Jak mogę stwierdzić w wierszu poleceń, czy komputer wymaga ponownego uruchomienia?

256

Podczas instalowania niektórych aktualizacji (np. Nowego jądra) w Ubuntu Desktop pojawia się komunikat, że wymagane jest ponowne uruchomienie komputera (w Lucid ikona wylogowania zmienia kolor na czerwony).

Jak mogę sprawdzić w wierszu poleceń, czy serwer Ubuntu wymaga ponownego uruchomienia?

Mógłbym wyrazić zgodę na „Wymagany restart systemu” /etc/motd, ale chciałbym bardziej eleganckiego rozwiązania. Chcę również rozwiązania, które działa w starszych wersjach, np. Hardy (8.04 LTS).

Marius Gedminas
źródło
Jeśli utrzymujesz serwer, wkrótce również zrozumiesz, czy aktualizacja nie wymaga ponownego uruchomienia. Większość aktualizacji nie wymaga ponownego uruchomienia lub tylko ponownego uruchomienia usługi (które powinno to zrobić automatycznie).
eXlin,

Odpowiedzi:

289

Możesz po prostu sprawdzić, czy plik /var/run/reboot-requiredistnieje, czy nie.

Na przykład każdy z nich powie „nie ma takiego pliku” lub „nie znaleziono pliku”, jeśli nie trzeba go ponownie uruchamiać, w przeciwnym razie (jeśli trzeba zrestartować komputer) plik istniałby, a te polecenia wyświetlałyby informacje o pliku:

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

W skrypcie bash możesz użyć:

#!/bin/bash
if [ -f /var/run/reboot-required ]; then
  echo 'reboot required'
fi
Weboide
źródło
1
To działa i działa również na Hardy. (Nie działa na Dapper - 6.06 - który wciąż mam na jednym komputerze. Trudne). Nawiasem mówiąc, plik / var / run / reboot wymagany jest tworzony przez / usr / share / update-notifier / powiadomienie-ponowne uruchomienie -required, który jest wywoływany ze skryptów opiekuna różnych pakietów.
Marius Gedminas
2
Działałoby to również na Dapper, gdybym zainstalował pakiet aktualizacji-powiadamiającego, z tym wyjątkiem, że chce ściągnąć 120 GN-ów GNOME na mój starożytny serwer.
Marius Gedminas
10
Lepsza instalacja update-notifier-common, nie zależy od żadnych elementów GUI (ale nie istnieje dla Dappera).
Marius Gedminas
1
FWIW, aktualizacja-notifier-common nie jest domyślnie instalowana na serwerze Lucid.
Marius Gedminas
5
Dzięki! a plik /var/run/reboot-required.pkgswyświetli listę pakietów, które wymagają ponownego uruchomienia.
nealmcb
44

W pakiecie debian-goodies to polecenie o nazwie, checkrestartktóre jest dość przydatne. Jego dane wyjściowe mogą pomóc w uniknięciu pełnego restartu.

Informuje, które działające aplikacje załadowały biblioteki współdzielone, które zostały zaktualizowane podczas działania aplikacji. Następnie ręcznie uruchom ponownie aplikacje i usługi i unikaj pełnego restartu. Jednak nie pomaga w aktualizacjach jądra.

aquaherd
źródło
1
Jak mogę sprawić, że uniknę pełnego restartu?
Oxwivi,
11
Informuje, które uruchomione aplikacje załadowały biblioteki współdzielone, które zostały zaktualizowane podczas działania aplikacji. Następnie ręcznie uruchom ponownie aplikacje i usługi i unikaj pełnego restartu. Jednak nie pomaga w aktualizacjach jądra.
aquaherd
To powinna być najlepsza odpowiedź. Bardzo pomocny. OpenSUSE ma wbudowane narzędzie (a także pomaga ci je uruchomić). Szkoda, że ​​Ubuntu przechodzi po prostu „restart, restart”. Na przykład colord potrzebował tutaj ponownego uruchomienia. Dlatego nie ma potrzeby ponownego uruchamiania.
Shiki,
@aquaherd Bardzo pomocny komentarz - może warto przenieść to do swojej odpowiedzi?
Duncan Jones
33

Zwykle jeśli plik

/var/run/reboot-required 

istnieje, powinieneś zrestartować komputer. Możesz sprawdzić, czy plik istnieje, używając tego prostego polecenia w gnome-terminal.

ls /var/run/reboot-required
kone4040
źródło
Wygląda na to, że ten plik nie jest już tworzony na podstawie aktualizacji-generatora powiadomień, który był używany do jego utworzenia.
Scott
17

Oprócz najbardziej bezpośrednich metod napisanych przez innych, przydatne jest wskazanie, jeśli używasz byobu - zestawu skryptów, które sprawiają, że ekran GNU jest nieco bardziej przyjazny dla użytkownika. Pokazuje zestaw informacji na dole ekranu, który może obejmować to, czy wymagane jest ponowne uruchomienie - wraz z tym, czy aktualizacje są dostępne, czas, czas działania, wykorzystana pamięć ...

Na tym zrzucie ekranu widać z 199!dolnej linii z czerwonym tłem, że dostępnych jest 199 aktualizacji. !! Oznacza, że niektóre są aktualizacje zabezpieczeń . Menu na pierwszym planie wybiera, które powiadomienia o stanie powinny być wyświetlane.

Jeśli wymagane jest ponowne uruchomienie, będzie to wskazywane przez symbol (R)wyświetlany na dolnym pasku z białym tekstem na niebieskim tle. Więcej szczegółów i inne wskaźniki można znaleźć na stronie podręcznika użytkownika Byobu .

zrzut ekranu

Hamish Downer
źródło
9

/etc/motdPlik dostaje swoje informacje o tym, czy jest wymagane ponowne uruchomienie z /var/run/reboot-requiredpliku.

Możesz sprawdzić zawartość tego pliku w terminalu za pomocą cat /etc/motdpolecenia

ajmitch
źródło
update-notifier-common używany do tworzenia tego, ale już nie
Scott
8

Jeśli masz zainstalowane pakiety typu restart-notifier lub update-notifier-common, otrzymujesz pliki / var / run / reboot-wymagany i /var/run/reboot-required.pkgs

reboot-notifier jest nowszy w Ubuntu Wily i Xenial. Debian jest rozciągnięty, ale w jessie-backports

update-notifier-common Jest starszy, we wszystkich wersjach Ubuntu, w tym Xenial i Debian Wheezy. Nie w Debian Stretch ani Jessie.

(Istnieje pewne podłoże do pakietu restartu-powiadamiającego na https://feeding.cloud.geek.nz/posts/introducing-reboot-notifier/ )

Jeśli nie masz zainstalowanych tych pakietów, możesz porównać wersję pakietu Linux z zainstalowaną wersją:

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)

Widać tutaj, że najnowszym zainstalowanym jądrem jest 3.16.7-ckt20-1 + deb8u4, ale działające jądro to 3.16.7-ckt20-1 + deb8u3. Dlatego ten system wymaga ponownego uruchomienia. U4 kontra U3 na samym końcu.

Może być konieczne przewinięcie powyższego pola. W wersji / proc / version liczy się wersja na końcu linii.

Bardzo niewielka zmiana kodu wersji jest typowa dla aktualizacji jądra bezpieczeństwa Debiana.

needrestart

Inną opcją jest instalacja needrestartpakietu.

sudo apt-get install needrestart
sudo needrestart -k

Wydaje się działać, nawet jeśli needrestart został zainstalowany po aktualizacji jądra.

Tim Bray
źródło
1
W jaki sposób twój pierwszy akapit koreluje z wersjami Ubuntu?
muru
Słuszna uwaga. Dzięki. Spędziłem tak dużo czasu na testowaniu i wypróbowywaniu pakietów, których tak bardzo mi brakowało. Zrobiłem to, aby wyjaśnić i dołączyć informacje o pakiecie ubuntu.
Tim Bray,
Wcześniej, 8.04, po aktualizacji wymagającej ponownego uruchomienia, trybik zmieni kolor na czerwony. Jak mogę odzyskać to zachowanie?
PenguinCSC
Ubuntu 14.04, otrzymujędpkg-query: no packages found matching linux-image-*
the_nuts
Unknown option: kw Ubuntu 14.04.
Cees Timmerman,
7

Dodałem następujące do mojego pliku .bash-aliasses:

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

Wydawało się to prostsze niż instalacja pakietu dla tego stosunkowo prostego zadania. Potem po prostu biegam:

you@somewhere:~$ rr
No reboot needed
you@somewhere:~$ 
Koziorożec 1
źródło
1

Rozwiązanie biednego człowieka:

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

(Uwaga: trzy przypadki nawiasów kwadratowych z białą spacją w środku powinny być „[<spacja> <tab>]”.)

Enrique Perez-Terron
źródło
grub 2 już nie używa /boot/grub/menu.lst, teraz jest /boot/grub/grub.cfg.
Marius Gedminas,
-1

Nie jest odpowiedź na pytanie, ale zastrzeżenie dotyczące kilku odpowiedzi: /var/run/reboot-requiredto nie wiarygodnym źródłem, czy restart jest rzeczywiście konieczne.

Prosty test: gdy nowe jądro stanie się dostępne, zainstaluj je, uruchom ponownie. Po ponownym uruchomieniu uruchom bieg, apt autoremoveaby pozbyć się starych, nieużywanych już jąder. Po uruchomieniu będzie to oznaczać, że wymagane jest ponowne uruchomienie komputera, co jest kompletnym nonsensem.

zadzwonić
źródło
3
Cóż, usunięcie jądra ponownie generuje plik konfiguracyjny gruba, po czym prawdopodobnie dobrym pomysłem jest zrestartowanie komputera, aby sprawdzić, czy nadal można uruchomić system. Przynajmniej tak uzasadniam sobie tę (błędną) funkcję.
Marius Gedminas