本篇介紹 CentOS Linux 系統在進行軟體套件更新之後,該如何判斷作業系統是否需要重新啟動。

Linux 伺服器的系統與軟體更新是定期需要做的工作,某些重要的系統套件在更新完之後,可能會需要重新啟動對應的服務,甚至若有更新到 Linux 核心的時候,還會需要重新開機,而如何判斷哪些服務要重新啟動,以及何時需要重新開機,就是更新後常會遇到的小問題。


needs-restarting 是一個 yum-utils 套件中的一個小工具,它可以快速檢查目前的系統狀態,列出需要重新啟動的服務,並且檢查 Linux 核心的版本,判斷是否需要重新開機。

使用前先用 yum 安裝 yum-utils 套件:

# 安裝 yum-utils 套件
sudo yum install yum-utils

檢查 Linux 系統是否需要重新開機

執行 needs-restarting 指令搭配 -r 參數可以檢查 Linux 核心版本,判斷作業系統是否需要重新啟動:

# 檢查作業系統是否需要重新啟動
needs-restarting -r
Core libraries or services have been updated:
  kernel -> 3.10.0-957.1.3.el7
  kernel -> 3.10.0-957.5.1.el7
  dbus -> 1:1.10.24-13.el7_6
  kernel -> 3.10.0-862.14.4.el7
  openssl-libs -> 1:1.0.2k-16.el7_6.1
  systemd -> 219-62.el7_6.5
  glibc -> 2.17-260.el7_6.3
  linux-firmware -> 20180911-69.git85c5d90.el7
  kernel -> 3.10.0-957.10.1.el7
  kernel -> 3.10.0-862.11.6.el7

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

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

如果輸出的訊息中,有 Reboot is required ... 這樣的訊息,就代表目前運行的 Linux 核心版本過舊,需要重新開機。

另一個檢查方式是看 needs-restarting 指令執行的傳回值,如果是 0 就代表不需要重新開機,而若是 1 則代表需要重新開機:

# 查看傳回值
echo $?
1

若要立即重新開機的話,就執行:

# 立即重新開機
sudo reboot

或是讓系統排定在指定的時間點再進行重新開機:

# 指定時間重新開機
shutdown -r 21:30 &

檢查服務是否需要重新啟動

若執行 needs-restarting 並加上 -s 參數,可以列出需要重新啟動的系統服務:

# 檢查是否有服務需要重新啟動
sudo needs-restarting -s
chronyd.service
systemd-logind.service
NetworkManager.service
rsyslog.service
mariadb.service
rh-php71-php-fpm.service
auditd.service
getty@tty1.service
serial-getty@ttyS0.service
sshd.service
nginx.service
firewalld.service
dbus.service
systemd-journald.service
systemd-udevd.service
polkit.service

若要重新啟動指定的服務,可以使用 systemctl 搭配 restart 參數,例如重新啟動 sshd 則執行:

# 檢查是否有服務需要重新啟動
sudo systemctl restart sshd

參考資料:Server Fault