apt11.9.1

apt11.9.1

如果您在终端上运行apt-get命令并想在软件中心安装东西,该中心会说它会等到apt-get完成。我想知道是否可以在终端上执行相同的操作,即apt-get在终端上等待直到锁被释放。

我发现这个链接,用于aptdcon安装东西。我想知道是否:

  • 难道真的不能用吗apt-get
  • aptdcon与 兼容,apt-get即我可以使用两者来安装东西而不破坏系统吗?

答案1

apt11.9.1

这已解决Debian 错误 #754103这次提交。该修复适用于 1.9.11 更新的 apt 版本。

  • 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

(重贴自询问 ubuntu

现在有一个内置选项apt-get可以让您等待另一个 apt 完成。

使用该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

欲了解更多信息,请参阅:等待 apt 锁定,无需使用 hacky bash 脚本。这个选项是apt-get2020 年 2 月添加

答案3

你已经可以这样做了:

创建一个名为 apt-get (apt-get 的包装)的新脚本

/usr/local/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

运行。使用 synaptic 或另一个 apt-get 打开再次运行它。 ;)

/usr/local/sbin在路径中较早出现...

我认为这可能会导致某个地方的脚本混乱......也许?

答案4

对于使用旧版本(< 1.9.11)的人来说,上述方法可能不起作用,所以这是我的解决方案的 hacky 版本。

#!/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

相关内容