如何避免“apt-get”卡住?

Ant*_*uez 4 apt scripts wget

在某些情况下,例如:

  • 互联网连接速度慢
  • 慢 PPA 或来源
  • Wifi 上网或 3g 上网

apt-get 可能会在更新、安装、升级或 dist-upgrade 过程中卡住……无休止地(由您来强制关闭)

当我说卡住时:它下载文件,开始下载,放慢速度并在某个时候等待,然后停止下载但仍在等待文件结束。

据我所知,它似乎发生在有很多延迟变化时(所以当服务器饱和或有 wifi/3g 互联网访问时)

这种效果也会影响官方存储库。所以它不是 source.list 的东西。

我们如何告诉 apt-get :

  1. 停止无休止的等待
  2. 下载过程中出现超时或丢包重试下载

我正在寻找一种不涉及诸如Ctrl+C或 kill 之类的蛮力方法的解决方案。我正在寻找与脚本更兼容的东西(因此在启动 apt-get 行时没有“人工”干预)。

gei*_*rha 5

您可以使用timeout命令(由同名包安装)运行命令并在超过N秒时将其杀死。不过,我会谨慎使用它。在软件包安装期间杀死 apt-get 可能会搞砸,所以我建议只在超时的情况下运行下载部分。像这样的 bash 函数:

upgrade() {
    local retry=5 count=0

    # retry at most $retry times, waiting 1 minute between each try
    while true; do

        # Tell apt-get to only download packages for upgrade, and send 
        # signal 15 (SIGTERM) if it takes more than 10 minutes
        if timeout -15 600 apt-get --assume-yes --download-only upgrade; then
            break
        fi
        if (( count++ == retry )); then
            printf 'Upgrade failed\n' >&2
            return 1
        fi
        sleep 60
    done

    # At this point there should be no more packages to download, so 
    # install them.
    apt-get --assume-yes upgrade
}
Run Code Online (Sandbox Code Playgroud)

请参阅如何运行命令,并让它在 N 秒后中止(超时)?更多。