Pourquoi wget donne-t-il une erreur lorsqu'il est exécuté avec sudo, mais fonctionne correctement sans?


21

J'ai essayé la commande suivante:

$ wget -q --tries=10 --timeout=20 --spider http://google.com

(À partir de ce poste SO . Je veux vérifier ma connexion Internet dans bash.)

Je reçois la sortie suivante:

Spider mode enabled. Check if remote file exists.
--2015-09-28 09:55:50--  http://google.com/
Connecting to 127.0.0.1:3128... connected.
Proxy request sent, awaiting response... 302 Found
Location: http://www.google.de/?gfe_rd=cr&ei=k_IIVreaN-yH8Qfe1Yu4CA [following]
Spider mode enabled. Check if remote file exists.
--2015-09-28 09:55:50--  http://www.google.de/?gfe_rd=cr&ei=k_IIVreaN-yH8Qfe1Yu4CA
Connecting to 127.0.0.1:3128... connected.
Proxy request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Remote file exists and could contain further links,
but recursion is disabled -- not retrieving.

Cela semble correct, quelle que soit l'exécution de la cmd sudo, je reçois ceci:

Spider mode enabled. Check if remote file exists.
--2015-09-28 09:55:27--  http://google.com/
Resolving google.com (google.com)... failed: Name or service not known.
wget: unable to resolve host address google.com

J'ai besoin de cette ligne dans un script, que j'appelle avec sudoet donc elle échoue toujours.

Quelqu'un peut-il me dire la raison? Comment puis-je travailler autour de ça?


Désolé, je voulais réellement créer les questions dans AskUbuntu . Je ne sais pas si On-Topic ici ...
h0ch5tr4355

11
C'est sur le sujet ici.
Deltik

4
Ce serait hors sujet ici.
SnakeDoc

Cela ressemble à un problème XY . L'exécution aléatoire de wgetgoogle.com ne semble pas être un bon moyen de vérifier le bon fonctionnement d'une connexion Internet: vous pouvez par exemple utiliser une connexion autorisant les connexions HTTP avec Google, mais interdisant ce que votre script souhaite réellement faire. ; ou Google pourrait interdire à wget l’accès à leur site. Quel est le problème réel que vous avez, pour lequel vous pensez que sudo wget blahc'est une solution potentielle?
David Richerby

Réponses:


39

Vous avez un proxy défini dans votre environnement. Le vôtre semble être 127.0.0.1:3128.

Lorsque vous exécutez sudo, la variable d'environnement proxy n'est pas transmise, raison pour laquelle vous ne pouvez pas résoudre directement google.com.

Vous pouvez voir quels proxy / proxies vous avez définis dans vos variables d'environnement avec cette commande:

env | grep proxy

Informations complémentaires sur Ask Ubuntu

Remarque: Si vous souhaitez sudotransmettre la variable d'environnement de proxy HTTP, essayez ceci:

sudo http_proxy="$http_proxy" wget -q --tries=10 --timeout=20 --spider http://google.com

Vous pouvez également transmettre toutes les variables d'environnement à l'aide de sudo -E:

sudo -E wget -q --tries=10 --timeout=20 --spider http://google.com

Le débordement de pile a d'autres options pour garder la variable d'environnement quand sudoing.


5
OK, merci beaucoup d'avoir non seulement posté la réponse, mais également posté les liens pour l'explication. Travaillé pour moi parfaitement.
h0ch5tr4355

7
Vous pouvez également utiliser sudo -Epour préserver les variables d'environnement
Squidly

4
ne faire que transmettre http_proxy, ne serait-il pas sudo http_proxy=$http_proxy wget ...mieux? Si vous utilisez cela dans un script, vous n'avez pas à le changer si le proxy change.
Josef

1
Un gentil, @Josef. J'ai mis à jour la réponse avec votre suggestion.
Deltik

1
Vous pouvez également ajouter Defaults env_keep += "http_proxy ftp_proxy"à /etc/sudoerspour que sudo conserve automatiquement ces variables env.
François
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.