Почему wget выдает ошибку при выполнении с sudo, но работает нормально без?

21

Я попробовал следующую команду:

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

(Из этого поста . Я хочу проверить свое интернет-соединение в bash.)

Я получаю следующий вывод:

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.

Кажется, все в порядке, но при запуске cmd с sudo, я получаю это:

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

Мне нужна эта строка в скрипте, который я вызываю, sudoи поэтому он всегда терпит неудачу.

Может кто-нибудь сказать мне причину этого? Как я могу обойти это?

h0ch5tr4355
источник
Извините, я действительно хотел создать вопросы в AskUbuntu . Не уверен, что здесь по теме ...
h0ch5tr4355
11
Это по теме здесь.
Дельтик,
4
Это было бы вне темы там.
SnakeDoc
Это похоже на проблему XY . Случайное выполнение wgetс google.com не является хорошим способом проверки работоспособности интернет-соединения: например, у вас может быть соединение, которое разрешает HTTP-соединения с Google, но запрещает то, что ваш скрипт действительно хочет делать ; или Google может запретить wget доступ к их сайту. Какова реальная проблема, для которой вы думаете, что sudo wget blahэто потенциальное решение?
Дэвид Ричерби,

Ответы:

39

У вас есть прокси, определенный в вашей среде. Ваш , как представляется 127.0.0.1:3128.

При запуске sudoпеременная окружения прокси не передается, поэтому вы не можете напрямую разрешить ее google.com.

Вы можете увидеть, какие прокси / прокси вы определили в переменных вашей среды с помощью этой команды:

env | grep proxy

Дополнительная информация о Ask Ubuntu

Примечание. Если вы хотите sudoпередать переменную среды HTTP-прокси, попробуйте следующее:

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

Вы также можете передать все переменные окружения, используя sudo -E:

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

Переполнение стека имеет другие опции для сохранения переменной среды при sudoзагрузке.

Deltik
источник
5
Хорошо, большое спасибо за то, что вы не только разместили ответ, но и разместили ссылки для объяснения. У меня сработало отлично.
h0ch5tr4355
7
Вы также можете использовать sudo -Eдля сохранения переменных среды
Squidly
4
только для передачи http_proxy, не sudo http_proxy=$http_proxy wget ...лучше? Если вы используете это в любом скрипте, вам не нужно менять его, если прокси-сервер меняется.
Иосиф
1
Хороший, @Josef. Я обновил ответ с вашим предложением.
Дельтик,
1
Вы также можете добавить, Defaults env_keep += "http_proxy ftp_proxy"чтобы /etc/sudoerssudo автоматически сохранял эти переменные env.
Франсуа