터미널에서 명령을 실행 apt-get
하고 소프트웨어 센터에 무언가를 설치하려는 경우 센터에서는 apt-get
완료될 때까지 기다리겠다고 말합니다. 터미널에서 동일한 작업을 수행하는 것이 가능한지 궁금합니다. 즉, apt-get
잠금이 해제될 때까지 터미널에서 기다리는 것입니다.
내가 찾은이 링크, aptdcon
물건을 설치하는 데 사용됩니다. 다음 사항을 알고 싶습니다.
- 정말 사용할 수 없는 걸까요
apt-get
? aptdcon
호환됩니까? 즉,apt-get
시스템을 손상시키지 않고 설치하기 위해 두 가지를 모두 사용할 수 있습니까?
답변1
apt
11.9.1
이 문제는 해결되었습니다데비안 버그 #754103존재하다이번에 제출하세요. 이 수정 사항은 1.9.11로 업데이트된 적절한 버전에 적용됩니다.
- apt(8): 잠금 대기(닫힘:#754103)
매개변수를 또는 로 설정하여 -o DPkg::Lock::Timeout=60
이 옵션을 활성화 할 수 있습니다. 잠금을 기다리는 시간(초)은 어디에 있습니까?apt
apt-get
60
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::Timeout
apt-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-get
2020년 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