"데몬이 오래된 라이브러리를 사용합니다." 팝업 "어떤 서비스를 다시 시작해야 합니까?"라는 메시지가 표시되면 스크립트와 상호 작용할 수 없어 스크립트가 중단되었습니다. 이는 apt를 사용하여 패키지를 설치하거나 업데이트할 때 발생합니다(스크립트에서 또는 셸에서 직접). 이 스크립트는 많은 소프트웨어와 패키지를 설치합니다. 예는 다음과 같습니다.
나는 여러 다른 쉘과 장치에서 이것을 시도했습니다. 내 우분투 버전은 20.04입니다.
Enter/Return을 등록하지 않으며 키보드 입력(예: 아래쪽 화살표)은 다음을 수행합니다.
왜 이런 일이 발생하는지 모르겠고 이렇게 깨지는 것을 방지하는 방법(또는 팝업을 완전히 방지하는 방법)을 알고 싶습니다.
다음은 관련이 있을 수 있는 스크립트의 일부 줄입니다(문제를 해결하기 위해 처음에 추가한 일부 포함).
echo '* libraries/restart-without-asking boolean true' | sudo debconf-set-selections
# Set noninteractive frontend for apt-get to avoid prompts
export DEBIAN_FRONTEND=noninteractive
# Define the file path
FILE_PATH="/etc/needrestart/needrestart.conf"
# Check if the file exists
if [ -f "$FILE_PATH" ]; then
# Use sed to replace 'i' with 'a' for the specific configuration
sudo sed -i "s/\$nrconf{restart} = 'i';/\$nrconf{restart} = 'a';/g" "$FILE_PATH"
echo "The file has been updated successfully."
else
echo "The specified file does not exist."
fi
sudo dpkg-reconfigure -f noninteractive needrestart
sudo systemctl restart needrestart.service
echo '* libraries/restart-without-asking boolean true' | sudo debconf-set-selections
echo 'needrestart needrestart/restart-services boolean true' | sudo debconf-set-selections
# Update the package list and install dependencies
sudo apt-get update && \
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common -y
# Set timezone
ln -fs /usr/share/zoneinfo/America/New_York /etc/localtime && \
apt-get update && \
apt-get install -y tzdata && \
dpkg-reconfigure --frontend noninteractive tzdata
# Set environment variable for timezone
export TZ=America/New_York
# Attempt to install locales and generate en_US.UTF-8
apt-get update && \
apt-get install -y locales && \
locale-gen en_US.UTF-8
# Update packages, fix installations, install sudo, cleanup
apt-get update && \
apt-get install -f && \
apt-get install -y --no-install-recommends sudo && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
답변1
귀하가 언급한 특정 팝업은 needrestart
(귀하의 스크립트가 이를 구성했기 때문에 이미 알고 있다고 가정합니다)에 의해 생성됩니다.
needrestart
후크에 의해 호출됩니다. 여기서 관련된 두 개의 후크는 그것 apt
과 dpkg
후크입니다. 환경 변수를 null이 아닌 값으로 설정하여 apt
후크를 일시적으로 비활성화할 수 있습니다 . NEEDRESTART_SUSPEND
이 dpkg
후크는 구성할 수 없지만 이름을 변경하여 비활성화할 수 있습니다.
NEEDRESTART_MODE
환경 변수를 사용하여 (구성 파일을 수정하는 대신) 모드 구성 설정을 재정의할 수 있다는 점도 주목할 가치가 있습니다 .
다음 접근 방식을 권장합니다.
needrestart
스크립트에서 모든 조정 사항을 제거합니다.NEEDRESTART_SUSPEND
null이 아닌 값으로 설정 하고 내보냅니다.export NEEDRESTART_SUSPEND=1
NEEDRESTART_MODE
"자동" 또는 "목록"으로 설정 :export NEEDRESTART_MODE=l
위의 내용이 충분하지 않으면
dpkg
스크립트 시작 부분에서 후크를 비활성화합니다.[ -f /etc/dpkg/dpkg.cfg.d/needrestart ] && mv /etc/dpkg/dpkg.cfg.d/needrestart /etc/dpkg/dpkg.cfg.d/needrestart.disabled
끝에서 (또는 출구 트랩에서)
[ -f /etc/dpkg/dpkg.cfg.d/needrestart.disabled ] && mv /etc/dpkg/dpkg.cfg.d/needrestart.disabled /etc/dpkg/dpkg.cfg.d/needrestart
오래된 라이브러리를 사용하여 데몬을 다시 시작하려면 needrestart
스크립트 끝에서 이를 명시적으로 실행해야 할 수도 있습니다.