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.