Arch Linux를 다시 시작해야 하는지 어떻게 확인하나요? [복사]

Arch Linux를 다시 시작해야 하는지 어떻게 확인하나요? [복사]

/var/run/reboot-requiredArch Linux에는 시스템 재부팅이 필요한지 확인하기 위해 Debian/Ubuntu와 유사한 방법이 있습니까 ?

저는 중요한 라이브러리와 커널이 업데이트되고 업그레이드를 완료하려면 재부팅이 필요한 시기도 고려하는 포괄적인 솔루션을 찾고 있습니다. 이 내 꺼야현재 해결 방법커널만 고려하면 다음과 같습니다.

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

저는 수년 동안 아치를 사용해 왔지만 그런 것이 있는지는 몰랐습니다. 나는 이것을 프로덕션 시스템에서 사용하지 않기 때문에 일반적으로 재부팅하기 전에 누락된 라이브러리에 대한 오류가 발생할 때까지 기다립니다. 그런 다음 KDE/QT가 업데이트되었을 때 모든 그래픽 응용 프로그램에서 이상한 오류가 발생하기 시작했지만 OS 자체는 재부팅이 필요하지 않았고 WM/DE만 재부팅해야 하는 상황도 있었습니다.

관련 정보