Fedora 41 から、DNF5 が標準になります。DNF5 の新機能の一つに、再起動が必要かどうか判定する機能があるので、どんなものか試してみました。以下は、すべて Fedora 41 beta での実行結果です。

update 後に needs-restarting コマンドを指定すると、再起動が必要かどうか判定できます。

# dnf5 update kernel
...
# dnf5 needs-restarting
Updating and loading repositories:
Repositories loaded.
Core libraries or services have been updated since boot-up:
  * kernel
  * kernel-core
  * kernel-modules
  * kernel-modules-core

Reboot is required to fully utilize these updates.
More information: https://access.redhat.com/solutions/27943
# echo $?
1
#

出力は上記のような感じで、どのパッケージをインストールが必要になったのかが表示されます。再起動が必要な場合の終了コードは 1 です。kernel をアップデートした場合は再起動が必要なのは至極当然です。アップデートが必要かどうかの基準は表示された URL に記載ということのようです。

アップデート後の再起動が必要ない場合の出力は以下のようになります。

# dnf5 needs-restarting
...
No core libraries or services have been updated since boot-up.
Reboot should not be necessary.
# echo $?
0
# 

メッセージから、コアライブラリやコアサービスについても再起動が必要と判定されそう、と何となく分かります。再起動が不要な場合の終了コードは 0 です。

これまでに配信された中で、アップデートが必要と判定されたものは、以下のパッケージです。

  • kernel
  • kernel-core
  • kernel-modules
  • kernel-modules-core
  • systemd
  • *-firmware
  • openssl-libs
  • gobject-introspection
  • json-glib

先ほどの URL に記載のパッケージには入っていないものもあります。

私的には、「これは再起動が必要なんじゃないの?」と思ったものの、この機能で必要とは判定されなかったのは以下のとおりです。

  • glib2

この機能は、あくまで参考程度の情報と捉えた方がよいかもしれません。Fedora ならば、一週間に一回くらいは kernel が降ってくるので、どのみち再起動することになるので少々見逃しがあっても大事にはならないと思いますが、それ以外の RedHat 系のディストリビューションを使用する場合は、この機能だけに頼ったばかりに再起動忘れが発生しないように気をつけたいです。

サービスの再起動判定

--services オプションを付けると、サービスの再起動要否も判定できます。

# dnf update ca-certificates
...
# dnf5 needs-restarting
...
No core libraries or services have been updated since boot-up.
Reboot should not be necessary.
# dnf5 needs-restarting --services
...
NetworkManager-wait-online.service
auditd.service
chronyd.service
dovecot.service
dracut-shutdown.service
firewalld.service
monit.service
nginx.service
opendkim.service
opendmarc.service
sshd.service
polkit.service
postfix.service
strongswan.service
getty@tty1.service
systemd-resolved.service
kmod-static-nodes.service
# 

再起動が必要なサービス一覧が表示されました。ca-certificates の更新で、これらの サービスを再起動するかどうかは、個々の事情などにより、判断が分かれるのではないでしょうか?

例えば、monit については、私のサーバでは UNIX ソケットを LISTEN しているだけで、HTTPS での通信は全くしていないので、再起動は不要と判断します。

NetworkManager-wait-online.service については、全くの誤判定と言ってよいでしょう。 これは OS 起動時に、ネットワークの設定が済んでから通信可能になるまで、他のサービスの起動を待たせるサービスであり、 稼働中の OS で今からこのサービスを再起動したところで何の意味もありません。

coreutils をアップデートした時の結果です。

# dnf5 coreutils coreutils-common
...
# dnf5 needs-restarting
No core libraries or services have been updated since boot-up.
Reboot should not be necessary.
# dnf5 needs-restarting --services
...
NetworkManager-wait-online.service
auditd.service
chronyd.service
dovecot.service
dracut-shutdown.service
firewalld.service
monit.service
nginx.service
opendkim.service
opendmarc.service
sshd.service
polkit.service
postfix.service
strongswan.service
getty@tty1.service
systemd-resolved.service
kmod-static-nodes.service
# 

coreutil/usr/bin/ls など基本的なコマンドの集まりなので、 サービスの再起動が必要とまでは思えません。

次は、python3python3-libs をアップデートした後の結果です。

# dnf5 needs-restarting
No core libraries or services have been updated since boot-up.
Reboot should not be necessary.
# dnf5 needs-restarting --services
Updating and loading repositories:
Repositories loaded.
firewalld.service
# 

firewalld は Python で書かれているので、再起動は必要です。

私のサーバでは、独自に追加しているサービスで、Trac が動いています。Trac も Python で書かれているので、再起動は必要ですが出てきません。独自のサービスについては、判定の対象とならないか、 あるいは何か書き方があるのかもしれません。

まとめ

DNF5 の再起動要否判定について見てきました。いくつかの例が示すとおり、見逃しや過剰判定があり、 信頼に足るものではありません。 私の個人的な感想としては、この機能を使っても工数の削減にならず、別のリスクを抱え込むことになりそうなので、 あまり使わないかな、と思います。 それよりは、例えば最低限、週一回くらいタイマーで自動再起動させるとか、アップデートがあったら 一律再起動するとかの方が工数と安全性のバランスの面で良いと考えます。