如何检测 apt-get 更新是否因无网络连接而失败?

如何检测 apt-get 更新是否因无网络连接而失败?

我有一个运行该命令的脚本apt-get update,但由于没有互联网,该脚本无法检测到故障。
即,如果apt-get不是以 root 权限运行,则它会以code 100.
所以我可以做一个检查

if apt-get update
then
    echo "success!"
else
    echo "something went wrong
fi

但如果apt-get update在没有互联网连接的情况下运行,它会产生错误消息,一些是 STDOUT,一些是 STDERR,例如

这将转到 STDERR

...
W:获取失败http://archive.ubuntu.com/ubuntu/dists/trusty/InRelease
W:获取失败http://security.ubuntu.com/ubuntu/dists/trusty-security/InRelease
...

这将转到标准输出

...
Err http://archive.ubuntu.com trusty-updates Release.gpg
  Temporary failure resolving 'archive.ubuntu.com'
Ign https://deb.nodesource.com trusty InRelease
Ign https://deb.nodesource.com trusty Release.gpg
...

但最终它仍然返回 的退出0
如何检测apt-get upgrade因无法访问互联网而导致的故障?

答案1

这是一个可能效果更好的存根:

if apt-get update 2> /tmp/apt-get-errors
then
    if grep -q "^W: Failed to fetch" /tmp/apt-get-errors
    then
      echo "success!"
    else
      echo apt-get failed to fetch
    fi
else
    echo "something went wrong
fi
rm /tmp/apt-get-errors

基本思想是将 apt-get 的 stderr 输出捕获到文件中,然后在该文件中搜索已知的错误模式,然后再声明成功。

它可以通过使用 mktemp 和可能更好的 grep 模式来改进,但我现在没有办法测试 apt-get 。

答案2

我不确定这是否万无一失,但我想您可以测试互联网连接是否正常,但我不确定错误是否是由于没有互联网连接引起的。

cd [directory]
wget [just download any file aslong as you know the name.]
[ -f /[currentDir]/[filename] ] && wall "Internet Connection Is Existant" || wall "Any errors are likely caused by internet issues."
rm [file name just so it doesn't mess things up later.]

你可以将“wall”更改为 echo 我只是喜欢烦我的朋友,因为我经常使用 SSH..(1/2 debian 和 1/2 时间在 SSH 上..在终端应用程序或 shell 上。)

答案3

我认为这个--error-on=any选项可以达到预期的目的,尽管到目前为止我在实践中使用它的经验很少。我认为这是apt和的一个相对较新的功能apt-get

-eany, --error-on=any
    Fail the update command if any error occured, even a transient one.
apt update -eany
apt update --error-on=any
apt-get update -eany
apt-get update --error-on=any

当我关闭笔记本电脑的 wifi 并运行时apt update --error-on=any; echo $?,然后echo打印100.

相关内容