Как я могу запустить скрипт, когда интернет-соединение вот-вот потеряется?

Я использую wvdial (PPP dialer) с модемом SIM-карты, и иногда это соединение сбрасывается на стороне сервера. Я хотел бы запустить скрипт, который greps ifconfig чтобы получить объем загруженных данных и где-то хранит их. Очевидно, это нужно делать, когда соединение все еще живое, иначе я ничего не получаю, или несколько секунд спустя значение для нового соединения, потому что wvdial настроен на немедленное повторное подключение, когда соединение потеряно. Есть идеи?

Редактировать:

Конечно, я могу grep выводить ifconfig каждую секунду или две, но это ужасное обходное решение, которое даже не стоит рассматривать. Лучший сценарий, который я могу себе представить, – это каким-то образом захватить сигнал, который инструктирует ifconfig «сбросить счет» => приостановить сигнал на мгновение => запустить мой скрипт => разблокировать сигнал. Но, возможно, есть и другие возможности, о которых я не знаю, например, например, configure ifconfig , чтобы выгрузить предыдущий результат в файл, если данный интерфейс исчезнет. Другой вариант – вывести результат не из ifconfig в другом месте. BTW, каков источник ввода ifconfig ?

2 Solutions collect form web for “Как я могу запустить скрипт, когда интернет-соединение вот-вот потеряется?”

вы можете написать свой собственный сценарий оболочки, который регистрирует именно то, что вы хотите, через некоторое время (1) цикл с вызовом сна в конце (или любой желаемый уровень сна). Что-то вроде этого:

 function get_logname { echo `date +'%F-%H-%M-%S'`.log } function am_online { ping -c 1 google.com >/dev/null 2>&1 echo $? } function update_logfile { echo "YOUR DATA TO BE LOGGED" >> $1 } CUR_LOG=`get_logname` echo $CUR_LOG while [ 1 ]; do if [ "`am_online`" -eq 0 ]; then update_logfile $CUR_LOG else echo "we are offline!" CUR_LOG=`get_logname` fi sleep 1 done 

Пока вы находитесь в сети, он регистрируется в вашем файле журнала (>> для добавления новых данных,> для перезаписи файла, содержащего только новые данные) каждую секунду. Когда вы находитесь в автономном режиме, он постоянно выбирает новое имя для следующего файла журнала и ничего не записывает. Когда вы вернетесь в онлайн, он начнет регистрировать новый файл журнала с последним выбранным именем файла журнала, оставив неповрежденный файл журнала.

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

Сохраните как-то вроде «my_internet_logging_script.sh» и запустите как:

 sh my_internet_logging_script.sh 

в каталоге, где вы хотите, чтобы ваши лог-файлы (или редактировали сценарий соответственно).

Отвечая на ваш последний вопрос: ifconfig читает /proc/net/dev и /proc/net/if_inet6 . Информация о передаваемых данных для разных интерфейсов доступна в первом из этих файлов.

/proc – специальная файловая система, файлы которой не хранятся на жестком диске, но создаются ядром каждый раз, когда вы хотите их прочитать, поэтому доступ к файлам довольно быстр. Кроме того, parsing /proc/net/dev непосредственно должен быть немного быстрее, чем разбор ifconfig поскольку эта команда выполняет разные действия, которые вам не нужны.

Чтобы дать вам приблизительную идею, пришло время для 1000 повторных ifconfig или cat /proc/net/dev (repeat is zsh command):

 $ time (repeat 1000 ifconfig > /dev/null) 1.14s user 3.85s system 90% cpu 5.513 total $ time (repeat 1000 cat /proc/net/dev > /dev/null) 0.57s user 2.44s system 70% cpu 4.282 tota 

Разумеется, разбор /proc/net/dev прежнему не является хорошим решением, но, по крайней мере, вы можете получить 20-30% в скорости, если, в конце концов, вы решите анализировать выходные данные каждую секунду.

  • Модем Verizon LG VL600 USB 4G
  • Попытка получить USB-модем для работы с wvdial
  • Interesting Posts

    Просмотр двоичного кода не шестнадцатеричного

    sed + пометить строку в случае пройденного слова

    Windows 8.1 не появляется в загрузчике GRUB после установки Linux Mint 17.1 на раздел

    в списке есть экраны, но «нет экрана, который нужно возобновить»,

    Поддерживать имена файлов в виде отдельных аргументов в последовательных командах

    скрипт bash, не выполняемый cron

    Automount не отключается в Ubuntu 12.04 или 13.04

    Есть ли tr для перевода в более длинные строки?

    как отправить электронную почту, а также отобразить ее

    Как я могу предотвратить iptables от подсчета байтов и пакетов в пустых цепочках?

    Как я могу перечислить патчи установленного пакета в SUSE?

    Что `. . Foo ` делает в bash? Почему это соответствует `..`?

    Есть ли встроенное средство сжатия свопа (например, Compcache) для FreeBSD?

    Пределы мультиплексирования SSH

    Является ли терминал или оболочка ответственными за действия нажатий клавиш?

    Linux и Unix - лучшая ОС в мире.