bre*_*net 5 arch-linux upgrade reboot
是否有与 Debian/Ubuntu 等价的/var/run/reboot-required
Arch Linux 来确定是否需要重新启动系统?
我正在寻找一个全面的解决方案,该解决方案还考虑了何时更新关键库和内核以及需要重新启动才能完成升级。这是我目前只考虑内核的解决方法:
if [[ $(pacman -Q linux | cut -d " " -f 2) > $(uname -r) ]]; then
# reboot...
fi
Run Code Online (Sandbox Code Playgroud)
我使用此脚本来检查启动内核是否与当前内核匹配以及进程是否正在使用任何旧库。
#!/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
Run Code Online (Sandbox Code Playgroud)
示例输出:
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
Run Code Online (Sandbox Code Playgroud)
如果您只有使用旧库的进程,您可以重新启动进程而不是重新启动。