Я попробовал следующую команду:
$ 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
и поэтому он всегда терпит неудачу.
Может кто-нибудь сказать мне причину этого? Как я могу обойти это?
wget
с google.com не является хорошим способом проверки работоспособности интернет-соединения: например, у вас может быть соединение, которое разрешает HTTP-соединения с Google, но запрещает то, что ваш скрипт действительно хочет делать ; или Google может запретить wget доступ к их сайту. Какова реальная проблема, для которой вы думаете, чтоsudo wget blah
это потенциальное решение?Ответы:
У вас есть прокси, определенный в вашей среде. Ваш , как представляется
127.0.0.1:3128
.При запуске
sudo
переменная окружения прокси не передается, поэтому вы не можете напрямую разрешить ееgoogle.com
.Вы можете увидеть, какие прокси / прокси вы определили в переменных вашей среды с помощью этой команды:
Дополнительная информация о Ask Ubuntu
Примечание. Если вы хотите
sudo
передать переменную среды HTTP-прокси, попробуйте следующее:Вы также можете передать все переменные окружения, используя
sudo -E
:Переполнение стека имеет другие опции для сохранения переменной среды при
sudo
загрузке.источник
sudo -E
для сохранения переменных средыsudo http_proxy=$http_proxy wget ...
лучше? Если вы используете это в любом скрипте, вам не нужно менять его, если прокси-сервер меняется.Defaults env_keep += "http_proxy ftp_proxy"
чтобы/etc/sudoers
sudo автоматически сохранял эти переменные env.