Ubuntu Desktopに特定の更新(新しいカーネルなど)をインストールすると、再起動が必要であるという通知が表示されます(Lucidでは、ログアウトアイコンが赤に変わります)。
Ubuntu serverの再起動が必要かどうかをコマンドラインから確認するにはどうすればよいですか?
/etc/motd
で「システムの再起動が必要」をgrepできましたが、よりエレガントなソリューションが欲しいです。また、古いリリースで機能するソリューションが必要です。ハーディ(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
パッケージdebian-goodiesにはcheckrestart
という名前のコマンドがあり、これは非常に便利です。その出力は、完全な再起動を回避するのに役立ちます。
どの実行中のアプリケーションが、アプリケーションの実行中にアップグレードされた共有ライブラリをロードしたかを示します。その後、アプリケーションとサービスを手動で再起動し、完全な再起動を避けます。ただし、カーネルのアップグレードには役立ちません。
通常、ファイル
/var/run/reboot-required
再起動する必要があります。このファイルが存在するかどうかは、gnome-terminalでこの簡単なコマンドを使用して確認できます。
ls /var/run/reboot-required
他の人が書いた最も直接的なメソッドと同様に、 byob -GNUスクリーンをもう少し使いやすくするためのスクリプトのセットを使用すると便利な指示があります。画面の下部に一連の情報が表示され、再起動が必要かどうか、更新が利用可能かどうか、時間、稼働時間、使用メモリなどを含めることができます...
このスクリーンショットでは、_背景が赤の199!
から、199のアップデートが利用可能であることがわかります。 A !!
一部はセキュリティ更新であることを意味します 。フォアグラウンドのメニューは、どのステータス通知を表示するかを選択しています。
再起動が必要な場合は、下部のバーに青い背景に白いテキストで表示されるシンボル(R)
で示されます。詳細およびその他のインジケータについては、 byobu man page を参照してください。
/etc/motd
ファイルは、/var/run/reboot-required
ファイルから再起動が必要かどうかに関する情報を取得します。
cat /etc/motd
コマンドを使用して、ターミナルでこのファイルの内容を確認できます
.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:~$
Reboot-notifierまたはupdate-notifier-commonパッケージがインストールされている場合、ファイル/ var/run/reboot-requiredおよび/var/run/reboot-required.pkgsを取得します
reboot-notifierはUbuntu WilyおよびXenialでより新しいです。 Debianストレッチ、ただしjessie-backports
update-notifier-commonXenialおよびDebian Wheezyを含むすべてのUbuntuバージョンで古い。 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 ([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)
ここで、インストールされている最新のカーネルは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がインストールされた場合でも動作しているようです。
貧乏人の解決策:
#!/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>]」である必要があります。)