Linuxでは、カーネルやパッケージを更新した際に、OSやサービスの再起動が必要なのか迷うことがあります。Windowsだと、再起動が必要なときは再起動ボタンなどが表示されてわかりやすいのですが、Linuxでは特にそのような表示はされないからです。
そこでここでは、RedHat系Linux(AlmaLinux)とDebian系Linux(Ubuntu)のそれぞれで、パッケージ更新後にサービスやOSの再起動が必要かどうかを判別する方法を解説します。
目次
RedHat系Linuxの場合
RHEL8系以降のRedHat系Linuxでは、パッケージ管理ツールの「dnf」に「needs-restarting」機能が標準搭載されており、dnfコマンドでカーネルやパッケージを更新した後に「dnf needs-restarting」コマンドを実行することで、再起動が必要なプロセスがある場合は、プロセスが一覧表示されます。
# dnf 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
再起動が必要なサービスがあるかを確認したいときは「-s」オプションを付けて実行することで、再起動が必要なサービスがあれば一覧表示されます。
# dnf needs-restarting -s
chronyd.service
systemd-logind.service
NetworkManager.service
postfix.service
dbus.service
auditd.service
lvm2-lvmetad.service
OSの再起動が必要かどうかを確認したいときは「-r」オプションを付けて実行し、再起動が必要と判断された場合は「Reboot is required to ensure that your system benefits from these updates.」と表示されます。
ちなみに、再起動が必要な場合のコマンドの戻り値は「1」、再起動が不要の場合は「0」です。
# dnf needs-restarting -r
Reboot is required to ensure that your system benefits from these updates.
Debian系Linuxの場合
Ubuntuに代表されるDebian系のLinuxで、パッケージのアップデート後にサービスの再起動が必要かを判別したいときは、あらかじめ以下のパッケージをインストールしておきます。
$ sudo apt install debian-goodies
すると、パッケージ更新後にchckrestartコマンドを実行することで、サービスの再起動が必要なときは、該当のプロセスが一覧表示され、再起動が不要なときは「# Found 0 processes using old versions of upgraded files」と表示されます。
$ sudo checkrestart
パッケージのアップデート後にOSの再起動が必要かを判別したいときは、あらかじめ以下のパッケージをインストールしておきます。
sudo apt install update-notifier-common
すると、パッケージ更新後にOSの再起動が必要なときは「/var/run/reboot-required」というファイルが生成されます。なお、該当のファイルには「*** System restart required ***」と記載されています。
あとがき
上に紹介した方法で再起動が必要かをある程度は判断できますが、確実なのは「パッケージを更新したときはもれなくOSを再起動する」です。