Arch-Linux

如何檢查 Arch Linux 是否需要重啟?

  • January 25, 2021

是否有與 Debian/Ubuntu 等效的/var/run/reboot-requiredArch Linux 來確定是否需要重新啟動系統?

我正在尋找一個全面的解決方案,該解決方案還考慮到關鍵庫和核心何時更新以及需要重新啟動才能完成升級。這是我目前只考慮核心的解決方法:

if [[ $(pacman -Q linux | cut -d " " -f 2) > $(uname -r) ]]; then
 # reboot...
fi

我使用這個腳本來檢查引導核心是否與目前核心匹配,以及程序是否正在使用任何舊庫。

#!/bin/bash

get_boot_kernel() {
   local get_version=0
   for field in $(file /boot/vmlinuz*); do
       if [[ $get_version -eq 1 ]]; then
           echo $field
           return
       elif [[ $field == version ]]; then
           # the next field contains the version
           get_version=1
       fi
   done
}

rc=1

libs=$(lsof -n +c 0 2> /dev/null | grep 'DEL.*lib' | awk '1 { print $1 ": " $NF }' | sort -u)
if [[ -n $libs ]]; then
   cat <<< $libs
   echo "# LIBS: reboot required"
   rc=0
fi

active_kernel=$(uname -r)
current_kernel=$(get_boot_kernel)
if [[ $active_kernel != $current_kernel ]]; then
   echo "$active_kernel < $current_kernel"
   echo "# KERNEL: reboot required"
   rc=0
fi
exit $rc

樣本輸出:

Xorg: /usr/lib/libedit.so.0.0.63
Xorg: /usr/lib/libgssapi_krb5.so.2.2
Xorg: /usr/lib/libk5crypto.so.3.1
Xorg: /usr/lib/libkrb5.so.3.3
Xorg: /usr/lib/libkrb5support.so.0.1
Xorg: /usr/lib/libzstd.so.1.4.5
# LIBS: reboot required
5.10.8-arch1-1 < 5.10.10-arch1-1
# KERNEL: reboot required

如果您只有使用舊庫的程序,則可以重新啟動程序而不是重新啟動。

引用自:https://unix.stackexchange.com/questions/630626