如何检查 Arch Linux 是否需要重新启动?

如何检查 Arch Linux 是否需要重新启动?

Arch Linux是否有与 Debian/Ubuntu 类似的方法/var/run/reboot-required来确定是否需要重新启动系统?

我正在寻找一种全面的解决方案,该解决方案还可以考虑何时更新关键库和内核以及需要重新启动才能完成升级。这是我的当前的解决方法仅考虑内核:

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

答案1

我使用此脚本来检查启动内核是否与当前内核匹配以及进程是否正在使用任何旧库。

#!/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

如果您只有使用旧库的进程,您可以重新启动进程而不是重新启动。

答案2

#!/usr/bin/bash

s1=$(pacman -Q linux | sed 's/linux //')
s2=$(uname -r | sed 's/-ARCH//')

if [ "$s1" == "$s2" ]; then
  echo OK
else
  echo REBOOT
fi

似乎有效。来源:bbs.archlinux.org/viewtopic.php?id=173508

答案3

我已经使用 arch 多年了,但不知道有类似的东西。我不在任何生产系统上使用它,因此我通常会等到收到有关缺少库的错误后重新启动。然后我还遇到了诸如 KDE/QT 更新时的情况,这使得我的所有图形应用程序开始出现奇怪的错误,但操作系统本身不需要重新启动,我只需要重新启动我的 WM/DE 即可。

相关内容