Wie kann ich über die Befehlszeile feststellen, ob für den Computer ein Neustart erforderlich ist?


256

Wenn Sie bestimmte Updates (zB einen neuen Kernel) in Ubuntu Desktop installieren, erhalten Sie einen Hinweis, dass ein Neustart erforderlich ist (in Lucid wird das Abmeldesymbol rot).

Wie kann ich über die Befehlszeile prüfen, ob ein Ubuntu- Server einen Neustart erfordert?

Ich könnte für "System Neustart erforderlich" in grep /etc/motd, aber ich möchte eine Lösung, die eleganter ist. Außerdem möchte ich eine Lösung, die in älteren Releases funktioniert, z. B. Hardy (8.04 LTS).


Wenn Sie den Server warten, werden Sie in Kürze auch feststellen, ob ein Update einen Neustart erfordert oder nicht. Die meisten Updates müssen nicht oder nur neu gestartet werden (dies sollte automatisch geschehen).
eXlin 18.11.10

Antworten:


289

Sie können einfach überprüfen, ob die Datei /var/run/reboot-requiredvorhanden ist oder nicht.

Beispielsweise würde eine dieser Optionen "Keine solche Datei" oder "Datei nicht gefunden" anzeigen, wenn Sie nicht neu starten müssen. Andernfalls (wenn Sie neu starten müssen) würde die Datei vorhanden sein und die folgenden Befehle würden Informationen zu der Datei anzeigen:

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

In einem Bash-Skript können Sie Folgendes verwenden:

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

1
Dies funktioniert, und es funktioniert auch auf Hardy. (Funktioniert nicht mit Dapper - 6.06 -, das ich immer noch auf einem Computer habe. Tough.) Die für / var / run / reboot erforderliche Datei wird übrigens von / usr / share / update-notifier / notify-reboot erstellt -required wird von den Betreuerskripten verschiedener Pakete aufgerufen.
Marius Gedminas

2
Es würde auch auf Dapper funktionieren, wenn ich das Update-Notifier-Paket installieren würde, mit der Ausnahme, dass es GNOME-Inhalte im Wert von 120 Megabyte auf meinen alten Server ziehen möchte.
Marius Gedminas

10
Besser Update-Notifier-Common installieren, es hängt nicht von irgendwelchen GUI-Dingen ab (existiert aber nicht für Dapper).
Marius Gedminas

1
FWIW, Update-Notifier-Common ist standardmäßig nicht auf dem Lucid-Server installiert.
Marius Gedminas

5
Vielen Dank! und die Datei /var/run/reboot-required.pkgslistet die Pakete auf, die einen Neustart erfordern.
Nealmcb

44

Im Paket debian-goodies ist ein Befehl namens enthalten, checkrestartder sehr nützlich ist. Die Ausgabe kann Ihnen dabei helfen, einen vollständigen Neustart zu vermeiden.

Hier erfahren Sie, welche laufenden Anwendungen gemeinsam genutzte Bibliotheken geladen haben, die während der Ausführung der Anwendung aktualisiert wurden. Anschließend starten Sie die Anwendungen und Dienste manuell neu und vermeiden einen vollständigen Neustart. Hilft jedoch nicht bei Kernel-Upgrades.


1
Wie kann ich einen vollständigen Neustart vermeiden?
Oxwivi

11
Hier erfahren Sie, welche laufenden Anwendungen gemeinsam genutzte Bibliotheken geladen haben, die während der Ausführung der Anwendung aktualisiert wurden. Anschließend starten Sie die Anwendungen und Dienste manuell neu und vermeiden einen vollständigen Neustart. Hilft jedoch nicht bei Kernel-Upgrades.
Aquaherd

Dies sollte die beste Antwort sein. Sehr hilfreich. OpenSUSE hat ein Tool eingebaut (und hilft Ihnen auch dabei, wie Sie es ausführen können). Schade, Ubuntu geht einfach "Neustart, Neustart". Zum Beispiel brauchte colord hier einen Neustart. Daher ist kein Neustart erforderlich.
Shiki

@aquaherd Sehr hilfreicher Kommentar - könnte es sich lohnen, ihn in Ihre Antwort aufzunehmen?
Duncan Jones

33

Normalerweise ist die Datei

/var/run/reboot-required 

existiert, sollten Sie neu starten. Sie können feststellen, ob diese Datei vorhanden ist, indem Sie diesen einfachen Befehl in gnome-terminal verwenden.

ls /var/run/reboot-required

Diese Datei scheint nicht mehr mit dem Update-Notifier-Common erstellt worden zu sein, mit dem sie erstellt wurde.
Scott

17

Neben den direktesten Methoden, die von anderen geschrieben wurden, gibt es einen praktischen Hinweis darauf, ob Sie byobu verwenden - eine Reihe von Skripten, um den GNU-Bildschirm benutzerfreundlicher zu gestalten. Es zeigt eine Reihe von Informationen am unteren Rand des Bildschirms an, darunter, ob ein Neustart erforderlich ist - zusammen mit der Verfügbarkeit von Updates, der Uhrzeit, der Betriebszeit, dem verwendeten Speicher ...

In diesem Screenshot sehen Sie 199!in der unteren Zeile mit dem roten Hintergrund, dass 199 Updates verfügbar sind. A !! bedeutet, dass es sich bei einigen um Sicherheitsupdates handelt . Das Menü im Vordergrund wählt aus, welche Statusbenachrichtigungen angezeigt werden sollen.

Wenn ein Neustart erforderlich ist, wird dies durch das Symbol (R)in der unteren Leiste mit weißem Text auf blauem Hintergrund angezeigt. Weitere Details und andere Indikatoren finden Sie auf der byobu-Manpage .

Bildschirmfoto


9

Die /etc/motdDatei erhält Informationen darüber, ob ein Neustart erforderlich /var/run/reboot-requiredist.

Sie können den Inhalt dieser Datei im Terminal mit dem cat /etc/motdBefehl überprüfen


Update-Notifier-Common verwendet, um dies zu erstellen, aber nicht mehr
Scott

8

Wenn Sie die Pakete reboot-notifier oder update-notifier-common installiert haben, erhalten Sie die Dateien / var / run / reboot-required und /var/run/reboot-required.pkgs

reboot-notifier ist neuer in Ubuntu Wily und Xenial. Debian strecken, aber in Jessie-Backports

update-notifier-common Ist in allen Ubuntu-Versionen älter, einschließlich Xenial und Debian Wheezy. Nicht in Debian Stretch oder Jessie.

(Hintergrundinformationen zum Paket "reboot-notifier" finden Sie unter https://feeding.cloud.geek.nz/posts/introducing-reboot-notifier/ )

Wenn Sie diese Pakete nicht installiert haben, können Sie die Version des installierten Linux-Pakets mit der Version vergleichen, die ausgeführt wird:

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)

Sie können hier sehen, dass der zuletzt installierte Kernel 3.16.7-ckt20-1 + deb8u4 ist, der Kernel jedoch 3.16.7-ckt20-1 + deb8u3 ausgeführt wird. Dieses System muss also neu gestartet werden. Die U4 vs U3 direkt am Ende.

Möglicherweise müssen Sie das Feld oben scrollen. In der / proc / -Version ist die Version am Ende der Zeile von Bedeutung.

Die geringfügige Änderung des Versionscodes ist typisch für ein Debian-Sicherheitskernel-Update.

Needrestart

Eine weitere Option ist die Installation des needrestartPakets.

sudo apt-get install needrestart
sudo needrestart -k

Scheint zu funktionieren, auch wenn nach dem Upgrade des Kernels ein Neustart erforderlich war.


1
Wie korreliert Ihr erster Absatz mit Ubuntu-Versionen?
muru

Guter Punkt. Vielen Dank. Ich hatte so lange damit verbracht, die Pakete zu testen und auszuprobieren, dass ich das verpasst hatte. Ich habe bearbeitet, um es klarer zu machen und Ubuntu-Paketinformationen einzuschließen.
Tim Bray

Zurück am 8.04, nach einem Update, das einen Neustart erforderte, würde das Zahnrad rot werden. Wie bekomme ich dieses Verhalten zurück?
PenguinCSC

Ubuntu 14.04 bekomme ichdpkg-query: no packages found matching linux-image-*
the_nuts

Unknown option: kin Ubuntu 14.04.
Cees Timmerman

7

Ich habe meiner .bash-aliases-Datei Folgendes hinzugefügt:

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

Schien einfacher als das Installieren eines Pakets für diese relativ einfache Aufgabe. Dann laufe ich einfach:

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

1

Die Lösung des armen Mannes:

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

(Hinweis: Die drei Fälle von eckigen Klammern mit Leerzeichen sollten "[<Leerzeichen> <Tabulator>]" sein.)


grub 2 verwendet /boot/grub/menu.lst nicht mehr, es ist jetzt /boot/grub/grub.cfg.
Marius Gedminas

-1

Keine Antwort auf die Frage, sondern eine Einschränkung in Bezug auf einige der Antworten: Dies /var/run/reboot-requiredist keine zuverlässige Quelle dafür, ob ein Neustart tatsächlich erforderlich ist oder nicht.

Einfacher Test: Wenn ein neuer Kernel verfügbar ist, installieren Sie ihn und starten Sie ihn neu. Führen Sie apt autoremovenach dem Neustart den Befehl aus, um einige alte, nicht mehr benötigte Kernel zu entfernen. Nachdem Sie das ausgeführt haben, wird angegeben, dass ein Neustart erforderlich ist, was völliger Unsinn ist.


3
Wenn Sie einen Kernel entfernen, wird Ihre Grub-Konfigurationsdatei neu generiert. Danach ist es wahrscheinlich eine gute Idee, einen Neustart durchzuführen, um sicherzustellen, dass Sie immer noch booten können. Zumindest rechtfertige ich diese (Fehl-) Eigenschaft so für mich.
Marius Gedminas
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.