Вопрос: Как я могу вызвать что-то, когда подключаюсь к Интернету?


Интересно, как я могу заставить машину что-то делать каждый раз, когда она подключается к Интернету?

например, проверка обновлений после подключения к Интернету?

благодаря


4
2018-06-20 13:14


Источник




Ответы:


Нет абсолютно никакого индикатора, показывающего, есть ли у вас интернет-соединение или нет. Это связано с тем, что вы всегда подключаетесь к каким-то шлюзам (маршрутизатор, модем, ...), который устанавливает соединение с вашим интернет-провайдером. Поэтому, чтобы быть уверенным, что вы в сети или нет, вам нужно проверить соединение самостоятельно, выполнив ping или создав HTTP-соединение (используя curl например) и проверки результата. Но будьте осторожны: ответ ping не означает, что вы можете иметь HTTP-соединение. И получение ответа HTTP не означает, что вы можете просматривать веб-страницы. Вам всегда нужно проверять ответ.

Вы можете быть уверены, что имеете интернет-соединение, если знаете ожидаемый ответ. Например, вы можете анализировать такие сайты, как http://www.whatismyip.de/ для IP-адреса с использованием регулярных выражений. Если ваше регулярное выражение является правильным и оно не находит IP-адрес, то у вас нет подключения к Интернету.

Короткий ответ: Напишите сценарий, в котором вы проверяете подключение к Интернету (как описано выше). При успешном выполнении вы выполняете нужные команды и устанавливаете флаг, который вы делаете на сегодняшний день (просто создайте файл и проверьте наличие), при неудаче вы ничего не делаете. Сделайте этот скрипт cronjob.


2
2018-06-20 13:46



Спасибо dAnjou, Но можете ли вы посоветовать мне, как начать .. Каковы основы. Я абсолютно новичок в этом! еще раз спасибо - DeaDSouL
Ну, одним из основных было бы изучить сценарии оболочки. Для этого есть тонны учебников. Я не могу рекомендовать конкретный. Следующее, что нужно прочитать, - это кроны. См. Ответ Дэвидса. Это хорошее начало, но если вы сделаете это так и настроите cronjob для этого каждые 5 минут, ваша система, вероятно, будет обновляться каждые 5 минут. Я не думаю, что это хорошо. Если вы обновили свою систему, я бы сказал, что вы должны создать такой файл touch updated_at_$(date +%F)и проверьте его в следующий раз перед обновлением. - dAnjou


Сценарий, который вы ищете, выглядит следующим образом:

[ -n "$(curl -s icanhazip.com | grep ^[0-9])" ] && firefox
  • «curl icanhazip.com» возвращает IP-адрес, если вы в сети
  • «grep ^ [0-9]» проверяет, является ли первый символ цифрой
  • "[-n" ... "] &&" означает ", если это так, переходите к следующей команде (которая в моем примере является" firefox ")"
  • Это быстрый хак, и этот скрипт не будет работать, если icanhazip.com не работает или у вас есть адрес IPv6.

Чтобы легко настроить cronjob для запуска его каждые x минут, вы можете установить «gnome-schedule».


1
2018-06-22 08:25





Сетевой менеджер предоставляет интерфейс DBus, который можно использовать для уведомления при подключении к сети. Это обычно означает, что вы также подключены к Интернету, но я не знаю, есть ли у Network-Manager какие-либо методы для фактического подтверждения этого. Вы можете использовать Network-Manager для получения уведомления при подключении к сети, а затем подтвердить, что у вас есть доступ в Интернет, и если да, сделайте то, что вы хотите.


1
2018-06-22 14:38





Как сказал dAnjou, я не думаю, что есть триггер, который вы можете использовать.

Однако, чтобы проверить подключение к Интернету, есть более простой способ, чем использовать завиток. Используйте fping следующим образом, который возвращает 0, если подключен, и 2, если нет. Дополнительную информацию см. В руководстве fping.

fping -q example.com

(Использование example.com действительно, поскольку имя домена существует, хотя оно зарезервировано для тестирования.)

Упрощение примера Davidc:

fping -q example.com && firefox

0
2018-06-22 11:50