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後に再起動が必要かどうか調べるには
コメント