apt11.9.1

apt11.9.1

터미널에서 명령을 실행 apt-get하고 소프트웨어 센터에 무언가를 설치하려는 경우 센터에서는 apt-get완료될 때까지 기다리겠다고 말합니다. 터미널에서 동일한 작업을 수행하는 것이 가능한지 궁금합니다. 즉, apt-get잠금이 해제될 때까지 터미널에서 기다리는 것입니다.

내가 찾은이 링크, aptdcon물건을 설치하는 데 사용됩니다. 다음 사항을 알고 싶습니다.

  • 정말 사용할 수 없는 걸까요 apt-get?
  • aptdcon호환됩니까? 즉, apt-get시스템을 손상시키지 않고 설치하기 위해 두 가지를 모두 사용할 수 있습니까?

답변1

apt11.9.1

이 문제는 해결되었습니다데비안 버그 #754103존재하다이번에 제출하세요. 이 수정 사항은 1.9.11로 업데이트된 적절한 버전에 적용됩니다.

  • apt(8): 잠금 대기(닫힘:#754103)

매개변수를 또는 로 설정하여 -o DPkg::Lock::Timeout=60이 옵션을 활성화 할 수 있습니다. 잠금을 기다리는 시간(초)은 어디에 있습니까?aptapt-get60

apt -o DPkg::Lock::Timeout=60 install FOO
apt-get -o DPkg::Lock::Timeout=60 install FOO

두 개의 동일한 명령을 실행하고 첫 번째 명령에 즉시 응답하지 않음으로써 이를 테스트할 수 있습니다.Do you want to continue? [Y/n]? 두 번째 명령을 실행하면 다음과 같은 메시지가 표시됩니다.

캐시 잠금 대기 중: 잠금을 획득할 수 없습니다 /var/lib/dpkg/lock-frontend. 프로세스 946299(apt)에 의해 보유됩니다.

답변2

(다음에서 다시 게시됨아쿠분투)

apt-get이제 다른 적절한 작업이 완료될 때까지 기다릴 수 있는 옵션이 내장되어 있습니다 .

DPkg::Lock::Timeoutapt-get 명령에 대한 시간 초과를 초 단위로 설정하려면 이 옵션을 사용하십시오 . 이 예에서는 60초 동안 기다립니다.

sudo apt-get -o DPkg::Lock::Timeout=60 install packagename

값을 -1로 설정하면 영원히 기다립니다.

sudo apt-get -o DPkg::Lock::Timeout=-1 install packagename

자세한 내용은 다음을 참조하세요.해킹된 bash 스크립트를 사용하지 않고 적절한 잠금을 기다립니다.. 이 옵션은apt-get2020년 2월에 추가됨.

답변3

이미 다음 작업을 수행할 수 있습니다.

apt-get(apt-get의 래퍼)이라는 새 스크립트를 만듭니다.

/usr/로컬/sbin

디렉터리에는 다음 bash 코드가 포함되어 있습니다.

#!/bin/bash
#Make sure there is no space before the hashbang above!
i=0 
tput sc 
while fuser /var/lib/dpkg/lock >/dev/null 2>&1 ; do
     case $(($i % 4)) in
         0 ) j="-" ;;
         1 ) j="\\" ;;
         2 ) j="|" ;;
         3 ) j="/" ;;
     esac
     tput rc
     echo -en "\r[$j] Waiting for other software managers to finish..." 
     sleep 0.5
     ((i=i+1)) 
done
/usr/bin/apt-get "$@"

실행 가능하게 만드는 것을 잊지 마세요:

sudo chmod +x /usr/local/sbin/apt-get

달리다. 시냅틱이나 다른 apt-get을 열어서 다시 실행하세요. ;)

/usr/local/sbin경로에서 더 일찍 나타납니다...

내 생각엔 이것이 어딘가에서 스크립트를 엉망으로 만들 수도 있을 것 같아요... 아마도요?

답변4

이전 버전(< 1.9.11)을 사용하는 사람들에게는 위의 방법이 작동하지 않을 수 있으므로 여기에 내 솔루션의 해킹 버전이 있습니다.

#!/bin/bash

timeout=12
wait_time=5
counter=0

while (( counter < timeout )); do
    if sudo apt install jq -y 2>/dev/null; then
        echo "jq installed successfully."
        exit 0
    else
        echo "Installation failed. Waiting for other software managers to finish..."
        sleep $wait_time
        ((counter++))
    fi
done

echo "Could not install jq within $((timeout * wait_time)) seconds. Skipping installation."

이것도 축소버전이군요

for i in {1..12}; do sudo apt install jq -y && exit 0 || sleep 5; done

관련 정보