Raspberry Pi OS(Raspbian, Debian)を含むLinuxではWindowsと同様に定期的にパッケージのアップデートが必要になりますが、アップデート後にサービスやOSの再起動が必要な場合があります。
そこでパッケージのアップデート後にサービスやOSの再起動が必要かどうかはどうやって判断できるのかを調べてみました。
[ad]3行まとめ
- checkrestartまたはneedrestartコマンドで再起動が必要かどうかが分かる
- needrestartパッケージがインストールされた状態でapt upgradeとすると自動的に再起動できるサービスは自動的に再起動してくれる。
- ただしカーネルのアップデートを反映するには再起動が必要
調査してみた
使えそうなパッケージ
Debianパッケージ検索(https://packages.debian.org/ja/)ページにて”restart”と検索したところ、以下の二つのパッケージが再起動の要否を確認してくれそうです。
- needrestart (https://packages.debian.org/stretch/needrestart)
- debian-goodiesのcheckrestart プログラム (https://packages.debian.org/stretch/debian-goodies)
比較のため両方インストールして確認してみます。
インストール
sudo apt-get install debian-goodies needrestart
を実行して上記2つのパッケージをインストールします。
その後、sudo apt update && sudo apt upgrade
で実際にパッケージをアップデートしてテスト用の環境を用意します。実際にアップデートしたところ、needrestart
プログラムが自動で実行されていることが分かりました。
緑色の5行がneedrestartが自動的に実行された際の出力です。ここでの出力の結果では再起動の必要はなさそうですが。。。
checkrestartを実行してみる
管理者権限でcheckrestartを実行してみます。
どうやらudevサービスの再起動が必要なようです。最後の行にサービスを再起動する場合のコマンドまで書いてあります。(ここではservice udev restartですね。)
確かに再起動の要否を確認できました。
needrestartを実行してみる
次に手動でneedrestartを実行してみます。
実行したところ、プロンプト(ncurses)が表示され再起動が促されました。
うーん、checkrestartとneedrestartでは出力結果が異なるのが気になりますが、再起動の要否は分かりました。
[ad]needrestartについてさらに調べてみたら結構便利なことが分かった
その後needrestartについてもう少し調べていたら、Raspberry Pi OSのベースとなるDebian GNU/Linuxのリリースノートにneedrestartに関することが記載されていました。
このリリースでの新規事項は needrestart です。これはインストールされると、毎回の APT アップグレードセッション後にチェックを実行します。システム上で動作しているサービスが、パッケージアップグレード時点での変更の恩恵を受けるために再起動する必要がある場合、これらを再起動してくれます。ライブラリのセキュリティ更新が動作しているサービスに確実に反映されるのを保証するため、needrestart をインストールすることをお勧めします。
Debian 8 (jessie) リリースノート (64 ビット PC 用)
なるほど、needrestartをインストールしておけばaptコマンドを実行する度に再起動が必要なサービスを自動的に再起動してくれるようです。先ほど検証した際にkernel以外が表示されなかったのは、既に対象サービスがneedrestartによって再起動された後だったからか。そしてkernelに関してはOS自体の再起動が必要だったため、手動実行の際に表示された、ということでしょう。
リリースノートがneedrestartをお勧めしているので、checkrestartではなくneedrestartを利用するのが良さそう。
まとめ
今回はaptでパッケージをアップデートした際にサービスやOSの再起動が必要かどうかを調べる方法を調査してみました。私自身はリリースノートにneedrestartがお勧めと書いてあったのを受けて、needrestartパッケージをメインに利用しようと思いますが、皆さんも一度自分で試してみて検討してみてはいかがでしょうか。
それでは良い一日を。