Como posso detectar quando o apt-get update falha devido a nenhuma conexão de rede?

1

Eu tenho um script que executa o comando apt-get update , mas o script não consegue detectar falhas devido à falta de internet.
ou seja, se apt-get não for executado com privilégios de root, ele sairá com code 100 .
então eu posso fazer um teste como

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

Mas se apt-get update for executado sem conexão à Internet, ele produzirá mensagens de erro, algumas para STDOUT, outras para STDERR, por exemplo

isso vai para STDERR

...
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/InRelease
W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/trusty-security/InRelease
...

Isso vai para STDOUT

...
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
...

Mas, no final, ele ainda retorna uma saída de 0 .
Como posso detectar uma falha de apt-get upgrade causada por nenhum acesso à Internet?

    
por the_velour_fog 05.03.2016 / 04:00

2 respostas

1

Aqui está um esboço que pode funcionar um pouco melhor:

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

A idéia básica é pegar a saída stderr do apt-get em um arquivo, e então procurar esse arquivo por padrões conhecidos antes de declarar sucesso.

Poderia ser melhorado com o uso do mktemp e, possivelmente, com um melhor padrão grep, mas eu não tenho como testar o apt-get agora.

    
por 05.03.2016 / 14:08
1

Não tenho certeza se isso é uma prova infalível, mas suponho que você possa testar se a conexão com a Internet está funcionando, mas não tenho certeza se um erro foi causado por nenhuma conexão com a Internet.

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.]

E você poderia mudar o "wall" para o echo Eu apenas gosto de incomodar meus amigos já que eu uso muito o SSH .. (1/2 debian e 1/2 time no SSH .. Em um aplicativo terminal ou shell.)

    
por 05.03.2016 / 07:48

Tags