Ubuntu Desktopに特定の更新(新しいカーネルなど)をインストールすると、再起動が必要であるという通知が表示されます(Lucidでは、ログアウトアイコンが赤に変わります)。
Ubuntu サーバーで再起動が必要かどうかをコマンドラインから確認するにはどうすればよいですか?
で「システムの再起動が必要」をgrepできましたが/etc/motd
、よりエレガントなソリューションが欲しいです。また、Hardy(8.04 LTS)などの古いリリースで機能するソリューションが必要です。
Ubuntu Desktopに特定の更新(新しいカーネルなど)をインストールすると、再起動が必要であるという通知が表示されます(Lucidでは、ログアウトアイコンが赤に変わります)。
Ubuntu サーバーで再起動が必要かどうかをコマンドラインから確認するにはどうすればよいですか?
で「システムの再起動が必要」をgrepできましたが/etc/motd
、よりエレガントなソリューションが欲しいです。また、Hardy(8.04 LTS)などの古いリリースで機能するソリューションが必要です。
回答:
ファイル/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
/var/run/reboot-required.pkgs
は、再起動が必要なパッケージがリストされます。
パッケージdebian-goodiesには、checkrestart
非常に便利な名前のコマンドがあります。その出力は、完全な再起動を回避するのに役立ちます。
どの実行中のアプリケーションが、アプリケーションの実行中にアップグレードされた共有ライブラリをロードしたかを示します。その後、アプリケーションとサービスを手動で再起動し、完全な再起動を避けます。ただし、カーネルのアップグレードには役立ちません。
他の人によって書かれた最も直接的な方法と同様に、byobuを使用すると便利な指示があります。これは、GNU画面をもう少しユーザーフレンドリーにするスクリプトのセットです。画面の下部に一連の情報が表示され、再起動が必要かどうか、更新が利用可能かどうか、時間、稼働時間、使用メモリなどを含めることができます...
このスクリーンショット199!
では、最下行の背景が赤で、199の更新が利用可能であることがわかります。A !!
は、一部がセキュリティ更新であることを意味します。フォアグラウンドのメニューは、どのステータス通知を表示するかを選択しています。
再起動が必要な場合、(R)
下部のバーに青い背景に白いテキストで表示される記号で示されます。詳細およびその他のインジケータについては、byobuのマニュアルページを参照してください。
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がインストールされた場合でも動作しているようです。
dpkg-query: no packages found matching linux-image-*
Unknown option: k
Ubuntu 14.04で。
貧乏人の解決策:
#!/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>]」である必要があります。)
質問への回答ではなく、いくつかの回答に関する警告: 再起動が実際に必要かどうかの信頼できるソースで/var/run/reboot-required
はありません。
簡単なテスト:新しいカーネルが利用可能になったら、インストールして、再起動します。再起動後、実行apt autoremove
して、不要になった古いカーネルを削除します。それを実行すると、再起動が必要であると表示されますが、これはまったく無意味です。