RHEL互換のLinuxでアップデート後に再起動が必要か確認する方法

RHEL互換のLinuxでアップデート後に再起動が必要か確認する方法

Linuxでは、パッケージを更新した際に、マシンの再起動が必要なのか迷うことがあります。Windowsだと、再起動が必要なときは再起動ボタンなどが表示されてわかりやすいのですが、Linuxでは特にそのような表示はされないからです。

そこでここでは、CentOSやAlma Linux、Rocky Linux、Miracle LinuxといったRHEL互換のLinuxで、パッケージ更新時に再起動が必要かどうかを確認してくれるツール「needs-restarting」を紹介します。

この記事は、以下の環境での動作結果を基にしています。他のディストリビューションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ディストリビューションバージョン
CentOS Linux7.4
AlmaLinux9.1

CentOS 7の場合

CentOS 7では、「needs-restarting」は「yum-utils」パッケージに含まれているため、次のコマンドでインストールしておく必要があります。

# yum install yum-utils

needs-restartingを利用するときは、yumコマンドでパッケージを更新した後に、needs-restartingコマンドを実行することで、再起動が必要なプロセスがある場合は以下のようにプロセスが一覧表示されます。

# needs-restarting

1096 : /usr/libexec/postfix/master -w
678 : /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
679 : /usr/sbin/NetworkManager --no-daemon
668 : login -- root
9606 : pickup -l -t unix -u
6879 : /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-eth0.pid -lf /var/lib/NetworkManager/dhclient-7a29d8a3-4a
56-4bf4-8024-5e526165b1d8-eth0.lease -cf /var/lib/NetworkManager/dhclient-eth0.conf eth0
646 : /usr/sbin/chronyd
615 : /sbin/auditd
1 : /usr/lib/systemd/systemd --switched-root --system --deserialize 22
473 : /usr/lib/systemd/systemd-journald
654 : /usr/lib/polkit-1/polkitd --no-debug
652 : /usr/sbin/irqbalance --foreground
644 : /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
1100 : qmgr -l -t unix -u
509 : /usr/lib/systemd/systemd-udevd
1015 : /usr/sbin/sshd -D
1013 : /usr/bin/python -Es /usr/sbin/tuned -l -P
9686 : sshd: root@pts/0
500 : /usr/sbin/lvmetad -f
653 : /usr/lib/systemd/systemd-logind

マシンの再起動が必要かどうかを確認するには「-r」オプションを付けて実行し、再起動が必要と判断された場合は「Reboot is required to ensure that your system benefits from these updates.」と表示されます。

ちなみに、再起動が必要な場合のコマンドの戻り値は「1」、再起動が不要の場合は「0」です。

# needs-restarting -r

Core libraries or services have been updated:
  kernel -> 3.10.0-862.3.2.el7

Reboot is required to ensure that your system benefits from these updates.

More information:
https://access.redhat.com/solutions/27943

再起動が必要なサービスを一覧表示するには「-s」オプションを付けて実行します。

# needs-restarting -s

chronyd.service
systemd-logind.service
NetworkManager.service
postfix.service
dbus.service
auditd.service
lvm2-lvmetad.service
sshd.service
tuned.service
polkit.service
systemd-journald.service
systemd-udevd.service
firewalld.service
irqbalance.service

CentOS 8以降の場合

CentOS 8やAlmaLinux、RockyLinux、MiracleLinuxといったRHEL互換のLinuxでは、パッケージ管理ツールの「dnf」に「needs-restarting」機能が標準搭載されており、dnfコマンドでパッケージを更新した後に「dnf needs-restarting」コマンドを実行することで、再起動が必要なプロセスがある場合は、プロセスが一覧表示されます。

あとがき

needs-restartingコマンドを使えば、再起動が必要かをある程度は確認することはできますが、確実なのは「パッケージを更新したときはもれなくOSを再起動する」です。