Чому wget видає помилку при виконанні з sudo, але працює добре без?


21

Я спробував таку команду:

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

цієї публікації SO . Я хочу перевірити підключення до Інтернету в 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і тому він завжди виходить з ладу.

Може хтось скаже мені причину цього? Як я можу обійти це?


Вибачте, я насправді хотів створити питання в AskUbuntu . Не впевнений, чи On-Topic тут ...
h0ch5tr4355

11
Це тематично тут.
Делтік

4
Це було б Off-Topic там.
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

Переповнення стека має інші можливості для збереження змінної середовища під час sudoing.


5
Гаразд, велике спасибі за те, що ви не лише розмістили відповідь, а й розмістили посилання для пояснення. Працювали для мене чудово.
h0ch5tr4355

7
Ви також можете використовувати sudo -Eдля збереження змінних середовища
Squidly

4
що тільки проходження http_proxy, не sudo http_proxy=$http_proxy wget ...було б краще? Якщо ви використовуєте це в будь-якому сценарії, вам не потрібно змінювати його, якщо проксі змінюється.
Йозеф

1
Гарний, @Josef. Я оновив відповідь з вашою пропозицією.
Deltik

1
Ви також можете додати Defaults env_keep += "http_proxy ftp_proxy"до того, /etc/sudoersщоб зробити sudo автоматично зберігати ці ENV змінні.
Франсуа
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.