Linuxでは、パッケージを更新した際に、マシンの再起動が必要なのか迷うことがあります。Windowsだと、再起動が必要なときは再起動ボタンなどが表示されてわかりやすいのですが、Linuxでは特にそのような表示はされないからです。
そこでここでは、CentOSやAlma Linux、Rocky Linux、Miracle LinuxといったRedHat互換のLinuxで、パッケージ更新時に再起動が必要かどうかを確認してくれるツール「needs-restarting」を紹介します。
目次
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といったRedHat互換のLinuxでは、パッケージ管理ツールの「dnf」に「needs-restarting」機能が標準搭載されており、dnfコマンドでパッケージを更新した後に「dnf needs-restarting」コマンドを実行することで、再起動が必要なプロセスがある場合は、プロセスが一覧表示されます。
あとがき
needs-restartingコマンドを使えば、再起動が必要かをある程度は確認することはできますが、確実なのは「パッケージを更新したときはもれなくOSを再起動する」です。