コマンドラインから、マシンの再起動が必要かどうかを確認するにはどうすればよいですか?


256

Ubuntu Desktopに特定の更新(新しいカーネルなど)をインストールすると、再起動が必要であるという通知が表示されます(Lucidでは、ログアウトアイコンが赤に変わります)。

Ubuntu サーバーで再起動が必要かどうかをコマンドラインから確認するにはどうすればよいですか?

で「システムの再起動が必要」をgrepできましたが/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-私はまだ1台のマシン上にあります。タフ。)ちなみに、/ var / run / reboot-requiredファイルは/ usr / share / update-notifier / notify-rebootによって作成されます-必須。さまざまなパッケージのメンテナースクリプトから呼び出されます。
マリウスゲドミナス

2
update-notifierパッケージをインストールした場合は、Dapperでも機能しますが、120メガグラム相当のGNOMEを古いサーバーにプルダウンしたい場合を除きます。
マリウスゲドミナス

10
update-notifier-commonのインストールを改善しました。GUIに依存しません(ただし、Dapperには存在しません)。
マリウスゲドミナス

1
FWIW、update-notifier-commonはデフォルトではLucidサーバーにインストールされません。
マリウスゲドミナス

5
ありがとう!ファイルに/var/run/reboot-required.pkgsは、再起動が必要なパッケージがリストされます。
nealmcb

44

パッケージdebian-goodiesには、checkrestart非常に便利な名前のコマンドがあります。その出力は、完全な再起動を回避するのに役立ちます。

どの実行中のアプリケーションが、アプリケーションの実行中にアップグレードされた共有ライブラリをロードしたかを示します。その後、アプリケーションとサービスを手動で再起動し、完全な再起動を避けます。ただし、カーネルのアップグレードには役立ちません。


1
完全な再起動を回避するにはどうすればよいですか?
オックスウィビ

11
どの実行中のアプリケーションが、アプリケーションの実行中にアップグレードされた共有ライブラリをロードしたかを示します。その後、アプリケーションとサービスを手動で再起動し、完全な再起動を避けます。ただし、カーネルのアップグレードには役立ちません。
-aquaherd

これが一番の答えです。非常に役立ちます。OpenSUSEにはツールが組み込まれています(また、実行方法も役立ちます)。恥ずかしいUbuntuは「再起動、再起動」するだけです。たとえば、colordはここで再起動する必要がありました。したがって、再起動する必要はありません。
シキ

@aquaherd非常に役立つコメント-あなたの答えにそれを移動する価値があるかもしれません?
ダンカンジョーンズ

33

通常、ファイル

/var/run/reboot-required 

再起動する必要があります。このファイルが存在するかどうかは、gnome-terminalでこの簡単なコマンドを使用して確認できます。

ls /var/run/reboot-required

このファイルは、作成に使用したupdate-notifier-commonからはもう作成されていないようです。
スコット

17

他の人によって書かれた最も直接的な方法と同様に、byobuを使用すると便利な指示があります。これは、GNU画面をもう少しユーザーフレンドリーにするスクリプトのセットです。画面の下部に一連の情報が表示され、再起動が必要かどうか、更新が利用可能かどうか、時間、稼働時間、使用メモリなどを含めることができます...

このスクリーンショット199!では、最下行の背景が赤で、199の更新が利用可能であることがわかります。A !! は、一部がセキュリティ更新であることを意味します。フォアグラウンドのメニューは、どのステータス通知を表示するかを選択しています。

再起動が必要な場合、(R)下部のバーに青い背景に白いテキストで表示される記号で示されます。詳細およびその他のインジケータについては、byobuのマニュアルページを参照してください

スクリーンショット


9

/etc/motdファイルは再起動が必要とされているかどうかについての情報を取得します/var/run/reboot-requiredファイル。

cat /etc/motdコマンドを使用して、ターミナルでこのファイルの内容を確認できます


update-notifier-commonはこれを作成するために使用されていましたが、もう作成されていません
スコット

8

reboot-notifierまたはupdate-notifier-commonパッケージがインストールされている場合、ファイル/ var / run / reboot-requiredおよび/var/run/reboot-required.pkgsを取得します

reboot-notifierは、Ubuntu WilyおよびXenialで新しくなりました。Debianストレッチ、ただしjessie-backports

update-notifier-commonは古く、XenialやDebian Wheezyを含むすべてのUbuntuバージョンです。Debian StretchやJessieにはありません。

https://feeding.cloud.geek.nz/posts/introducing-reboot-notifier/に 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がインストールされた場合でも動作しているようです。


1
最初の段落はUbuntuバージョンとどのように関連していますか?
ムル

いい視点ね。ありがとう。私はその長い時間をかけて、見落としたパッケージを試してみました。私は、より明確にして、ubuntuパッケージ情報を含めるように編集しました。
ティムブレイ

8.04に戻ると、再起動が必要な更新の後、コグは赤になります。その動作を元に戻すにはどうすればよいですか?
PenguinCSC

Ubuntu 14.04、私は得るdpkg-query: no packages found matching linux-image-*
-the_nuts

Unknown option: kUbuntu 14.04で。
シーズティマーマン

7

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

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

(注意:空白を含む角括弧の3つのケースは、「[<space> <tab>]」である必要があります。)


grub 2は/boot/grub/menu.lstを使用しなくなりました。現在は/boot/grub/grub.cfgです。
マリウスゲドミナス

-1

質問への回答ではなく、いくつかの回答に関する警告: 再起動が実際に必要かどうかの信頼できるソースで/var/run/reboot-requiredはありません

簡単なテスト:新しいカーネルが利用可能になったら、インストールして、再起動します。再起動後、実行apt autoremoveして、不要になった古いカーネルを削除します。それを実行すると、再起動が必要であると表示されますが、これはまったく無意味です。


3
カーネルを削除すると、grub構成ファイルが再生成されます。その後、再起動して、まだブートできることを確認することをお勧めします。少なくともそれが、この(誤)機能を自分に正当化する方法です。
マリウスゲドミナス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.