実行中のカーネルがUbuntuにインストールされている最新のカーネルと一致していることを確認してください。

実行中のカーネルがUbuntuにインストールされている最新のカーネルと一致していることを確認してください。

unattended-upgradesカーネルを含むUbuntuセキュリティ更新プログラムは自動的にインストールされますが、自動再起動はありません(大丈夫です。自動再起動は不要または不要です)。

次のような場合はどうすればわかりますかthe running kernel = the latest installed kernel

以下を使用して現在のカーネルバージョンを取得できます。

$ uname -r
5.4.0-104-generic

最新のインストールされたカーネルは、以下を介して見つけることができます。

$ dpkg -s linux-image-generic | awk '/Version:/{print $2}'
5.4.0.104.108

どちらも一致しません。 bashマジックを使用して2つの文字列を比較することはできますが(.108続けるべき理由は何ですか?)、標準アイテムを使用することを好みます。

答え1

以下は、私が使用しているものとは異なるディストリビューションで動作する必要があります。

#!/usr/bin/env bash

HIGHEST_KERNEL=`find /boot/vmlinuz-* | sort -V | tail -n 1 | sed 's|.*vmlinuz-||'`
RUNNING_KERNEL=`uname -r`
echo "Highest Kernel: $HIGHEST_KERNEL | Running Kernel: $RUNNING_KERNEL"
if [ "$HIGHEST_KERNEL" != "$RUNNING_KERNEL" ]; then
  echo "** Reboot Required **"
  exit 1
fi

答え2

この場合、システムが常に最新のカーネルを起動すると仮定すると、起動時間をカーネルイメージのタイムスタンプと比較します。最も簡単な方法は/proc/1プロキシを使用することです。

find /boot -newer /proc/1 -name vmlinuz\*

リストにエントリがある場合は、システムを再起動する必要があります(適切なシステムを使用して実行できます-exec)。

パッケージ化されたカーネルのみを使用している場合は、そのカーネルがあるかどうかを確認することもできます。/run/reboot-required存在する場合は再起動する必要があります。/run/reboot-required.pkgs再起動を要求するパッケージがリストされます。

needrestart同じ名前のパッケージを使用することもできます。

needrestart -k

答え3

何らかの理由でUbuntuでは非常に難しくなります。以下の回答は(!)Ubuntu 20.04 LTSにのみ適用され、他のバージョンでは動作する場合と動作しない場合があります。

したがって、質問で述べたように、次の方法で最新のインストール済みカーネルを取得できます。

$ version_installed=`dpkg -s linux-image-generic | awk '/Version:/{print $2}'`
$ echo "$version_installed"
5.4.0.104.108

最後の数字は#108関連性がないように見えるので切り取ります。

$ version_installed=`dpkg -s linux-image-generic | awk '/Version:/{print $2}'` | awk -F . '{print $1"."$2"."$3"."$4}'` # this can be improved but I'm too lazy
$ echo "$version_installed"
5.4.0.104

uname -r不要なビットを含むバージョンが提供されます5.4.0-104-generic。問題を解決しましょう。

$ version_running=`uname -r | sed 's/-generic//;s/-/\./;` # could be simplified as well
$ echo "$version_running"
5.4.0.104

今私たちはできる

#! /bin/bash

version_installed=`dpkg -s linux-image-generic | awk '/Version:/{print $2}' | awk -F . '{print $1"."$2"."$3"."$4}'`
version_running=`uname -r | sed 's/-generic//;s/-/\./'`

if [ "$version_installed"  = "$version_running" ]; then
    echo "All Good"
else
    echo "Life is a misery"
fi

関連情報