Ubuntu のパッケージアップデート実行で、システムの再起動が必要かチェックする方法

ALL
スポンサーリンク

Ubuntu のパッケージアップデート実行で、システムの再起動が必要か確認するコマンドについてです。

システム再起動の要否は、/var/run/reboot-required で確認します。
サービス再起動/プロセス再起動が必要な場合は、checkrestart コマンドで確認できます。

スポンサーリンク

/var/run/reboot-required

/var/run/reboot-required の存在を確認します。
存在していれば、システムの再起動が必要です。
また、その時のファイルの中身は次のようになっています。

*** システムの再起動が必要です ***

なお、/var/run/reboot-required の利用には update-notifier-commonパッケージが必要です。
Ubuntuデフォルトで入っていますが、無い場合は次のコマンドでインストールします。

apt install update-notifier-common

checkrestart コマンド

checkrestart で再起動が必要なサービスやプロセスがわかります。
ただし、システム再起動の要否はわかりません。

checkrestart は下記コマンドでインストールします。

apt install debian-goodies

checkrestart 実行時に、次の表示が出ますが、無視してかまいません。
/run/user/ 下のディレクトリにアクセスできない旨の警告ですが、パッケージアップデートで更新されるようなファイルが配置されることは無いので、プロセス再起動等の有無の判定に影響ありません。

lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/125/gvfs
      Output information may be incomplete.
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.

checkrestart -t

再起動対象プロセスの有無によって、コマンド実行の戻り値が異なります。

再起動対象プロセスがある場合は、次のような表示が出ます。
また、コマンドの戻り値は 1 です。

94 processes using old versions of upgraded files

無い場合は、コマンドの戻り値は 0 です。
次のような表示が出ます。

Found 0 processes using old versions of upgraded files

checkrestart(オプション無し)

再起動対象サービス/プロセスの有無に関わらず、コマンド実行の戻り値は 0 です。

再起動対象サービス/プロセスが無い場合の表示です。

Found 0 processes using old versions of upgraded files

再起動対象サービス/プロセスがある場合、出力結果の先頭に次のように表示されます。

Found 95 processes using old versions of upgraded files
(71 distinct programs)
(37 distinct packages)

対象プロセスが systemdサービスや、initdスクリプト で再起動できる場合は、続けて、次のように再起動方法が出力されます。

These are the systemd services:
systemctl restart networkd-dispatcher.service
systemctl restart polkit.service
systemctl restart sudo.service
These are the initd scripts:
service irqbalance restart
service cron restart
service unattended-upgrades restart
service atd restart
service ssh restart

プロセス再起動用の systemdサービス/initdスクリプトが無いプロセスは、次のように表示されます。

These processes (2) do not seem to have an associated init script to restart them:
gnome-shell:
        3926    /usr/bin/gnome-shell
xwayland:
        4118    /usr/bin/Xwayland

checkrestart -m

再起動対象プロセスの有無に関わらず、コマンド実行の戻り値は 0 です。
checkrestart(オプション無し)の出力結果と同等のものが、マシン処理しやすい形式で出ます。

再起動対象プロセスが無い場合は、次のような表示が出ます。

PROCESSES: 0

再起動対象プロセスがある場合は、次のような表示が出ます。
先頭が SERVICE の行は、再起動用の systemdサービス があります。
INIT の場合は、initdスクリプトがあります。
OTHER は、プロセス再起動用の systemdサービス/initdスクリプトが無いプロセスです。

PROCESSES: 94
PROGRAMS: 70
PACKAGES: 36
SERVICE:acpid,480,/usr/sbin/acpid
SERVICE:avahi-daemon,486,/usr/sbin/avahi-daemon
SERVICE:avahi-daemon,536,/usr/sbin/avahi-daemon
SERVICE:cron,488,/usr/sbin/cron
    (省略)
OTHER:tracker-miner-fs,682,/usr/libexec/tracker-miner-fs
OTHER:tracker-miner-fs,1245,/usr/libexec/tracker-miner-fs
OTHER:gnome-session-bin,687,/usr/libexec/gnome-session-binary
    (省略)

needrestart

その他、needrestartコマンドもありますが、checkrestart とほぼ同等の機能で、再起動対象プロセスの有無を戻り値で判定できないので、checkrestart の方をお勧めします。

参考

Ubuntuはmotdの「システムの再起動が必要です」フラグをどのように追跡しますか?
Linuxでパッケージアップデート後に再起動が必要なプロセスを確認する方法 – すこぶる.net
lsof や find コマンドで fuse.gvfsd-fuse の警告が出る問題について調べてみた | レンタルサーバー・自宅サーバー設定・構築のヒント
後悔あとを絶たず: 5月 2019 Raspbian Stretch (Debian Stretch) でapt-get upgrade後に再起動が必要かどうか調べるには

コメント