네트워크 연결이 없어 apt-get 업데이트가 실패했는지 어떻게 감지합니까?

네트워크 연결이 없어 apt-get 업데이트가 실패했는지 어떻게 감지합니까?

명령을 실행하는 스크립트가 있지만 apt-get update인터넷이 없기 때문에 스크립트가 실패를 감지할 수 없습니다.
즉, 루트 apt-get로 실행되고 있지 않으면 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.]

"벽"을 에코로 변경할 수 있습니다. 저는 SSH를 많이 사용하기 때문에 친구들을 괴롭히고 싶습니다. (데비안의 1/2, SSH의 1/2.. 터미널 앱이나 셸에서.)

답변3

나는 이 --error-on=any옵션이 의도한 목적에 부합할 것이라고 생각합니다. 하지만 지금까지 실제로 사용해 본 경험은 거의 없습니다. 나는 이것이 aptand 의 비교적 새로운 기능 이라고 생각합니다 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

노트북의 Wi-Fi를 끄고 실행하면 apt update --error-on=any; echo $?인쇄 echo됩니다 100.

관련 정보