업그레이드 후 팩맨을 다시 시작해야 합니까?

업그레이드 후 팩맨을 다시 시작해야 합니까?

달리고 난 후

sudo pacman -Syyu

또는

sudo pacman -S [something to install]

안전을 위해 재부팅해야 합니까?

답변1

가장 좋은 방법은 이전 라이브러리를 사용하는 프로그램/서비스를 찾아서 다시 시작하는 것입니다. "lsof"를 사용하여 사용된 모든 파일을 나열하고 "DEL" 유형의 파일을 찾으면 됩니다. DEL은 파일 이름이 파일 시스템에서 제거되었지만 누군가가 사용했기 때문에 여전히 메모리에 남아 있음을 의미합니다.

전체 명령줄은 다음과 같습니다.

 sudo lsof +c 0 | grep 'DEL.*lib' | awk '1 { print $1 ": " $NF }' | sort -u

답변2

커널, glibc 또는 systemd에 대한 업데이트가 있는 경우 최신 버전을 사용하려면 재부팅해야 할 수도 있습니다. 예를 들어 데스크톱 환경을 업데이트한 경우 간단한 로그아웃/로그인이면 충분합니다.

답변3

재부팅해야 하는 유일한 필수 이유는 새 커널입니다(소프트 재부팅을 위해 kexec를 사용할 수 있음). 바라보다https://wiki.archlinux.org/index.php/Kexec간단히 말해서 세부 사항은 다음과 같습니다.

  • 새 커널 initramfs 로드 및 시작 명령줄 지정

    kexec -l /boot/new-kernel --initrd=/boot/new-initramfs --reuse-cmdline
    
  • 호출 kexec( systemctl올바른 종료를 위해 kexec -e직접 실행됨)

    systemctl kexec
    
  • [email protected]Wiki에 설명된 대로 하나를 생성하고 재부팅하면 BIOS 재부팅을 수행하는 대신 systemd자동 소프트 재부팅이 사용됩니다.kexec

약간 개선된 버전은 시스템 서비스 이름을 제공합니다.

PIDS="(lsof +c0 -n 2> /dev/null | grep 'DEL.*lib' | awk '{print $2}' | sort -u)"
for PID in $PIDS; do
    systemctl status $i
done | grep '●' | awk '{print $2}' | sort -u

또는 한 줄:

for i in $(lsof +c0 -n 2> /dev/null | grep 'DEL.*lib' | awk '{print $2}' | sort -u); do systemctl status $i; done | grep '●' | awk '{print $2}' | sort -u

다음과 같은 몇 가지 문제가 있습니다.

  • systemctl daemon-reload다른 작업을 다시 시작하기 전에 수행해야 합니다.
  • PID 1( systemd자체)을 재부팅해야 하는 경우 다음을 사용할 수 있습니다.systemctl daemon-reexec
  • systemctl restart dbus.service일부 다른 서비스가 손상되어 dbus를 다시 시작한 후 다시 시작해야 합니다.
    • systemd그 자체:systemctl daemon-reexec
    • systemd-logind
    • systemd-machined
    • 아마도 systemd-*/other 서비스의 다른 (많은) 사용dbus
  • SSH를 통해 연결하고 SSH를 다시 ​​시작해야 하지만 systemctl restart sshd연결하자마자 다시 시작되지 않는 경우 다음 두 가지 옵션이 표시됩니다.
    • systemctl restart sshdat/cron/systemd타이머를 사용하여 일정을 계획하세요
    • 다른 원격(보안) 셸을 사용하여 다시 시작하세요 SSH.mosh
  • 프로세스를 실행하면 screen/tmux서비스가 SSH다시 시작되지 않을 수도 있습니다. 가장 쉬운 방법은 서비스를 다시 시작하기 전에 이러한 세션을 닫는 것입니다.
  • 이전 답변에서 언급했듯이 특히 그래픽 세션의 경우 로그아웃/로그인이 필요할 수 있습니다.

답변4

간단한 방법은 실행 중인 커널의 버전을 디스크의 최신 커널과 비교하는 것입니다. 내가 하나 찾았어스크립트이것은 쉽게 할 수 있습니다.

여러 커널이 설치되어 있으므로 현재 실행 중인 커널에 해당하는 커널만 확인하도록 스크립트를 수정했습니다. 예를 들어, 현재 버전 4.9.79 및 4.14.16이 설치되어 있으므로 /boot/vmlinuz-4.14-x86_64를 확인해야 합니다. 불행하게도 5.1 버전을 사용하기 시작하면 이 기능이 작동하지 않으므로 업데이트해야 합니다(4를 3으로 교체). 아니면 좀 더 안정적인 버전을 찾아야 합니다.

이것은 내 스크립트입니다.

#!/bin/sh
NEXTLINE=0
FIND=""
CURRENT_KERNEL=`uname -r`
KERNEL_PATH="/boot/vmlinuz-${CURRENT_KERNEL:0:4}"
for I in `file $KERNEL_PATH*`; do
  if [ ${NEXTLINE} -eq 1 ]; then
    FIND="${I}"
    NEXTLINE=0
   else
    if [ "${I}" = "version" ]; then NEXTLINE=1; fi
  fi
done
    if [ ! "${FIND}" = "" ]; then
      if [ ! "${CURRENT_KERNEL}" = "${FIND}" ]; then
    echo "Boot required"
  else echo "No boot required"
  fi
fi

관련 정보