Я пишу скрипт сервиса systemd
, который регистрирует использование полосы пропускания каждый час. Если сеть падает,что-нибудьдолжен сообщить этому скрипту, что сеть упала и скрипт временно остановится. Аналогично, если сеть снова работает,этодолжен сообщить ему, что сеть работает.
Я использую bash для написания скрипта на Ubuntu 15.10.
Прежде чем предлагать решение, учтите, что мне не нужен обходной путь, вроде отправки пинга на какой-либо сервер.
решение1
Лучшее, что вы можете сделать, — это использовать статусы, управляемые событиями, которые уже доступны в Network Manager.
Создайте файл
NetStatus.x
в/etc
:sudo nano /etc/NetStatus.up
Добавьте следующий текст:
Это файл NetStatus. Если его имя имеет расширение "up", это означает, что состояние сети up, тогда как расширение "down" означает, что она down. (Да!)
Отредактируйте
/etc/NetworkManager/dispatcher.d/01ifupdown
и добавьте выделенные жирным шрифтом утверждения ниже:case "$2" in up|vpn-up) export MODE="start" export PHASE="post-up" exec run-parts /etc/network/if-up.d mv /etc/NetStatus.down /etc/NetStatus.up ;; down|vpn-down) export MODE="stop" export PHASE="post-down" exec run-parts /etc/network/if-post-down.d mv /etc/NetStatus.up /etc/NetStatus.down ;;
Измените свой собственный скрипт сбора данных, чтобы проверить его существование
/etc/NetStatus.up
до начала фактического сбора данных, используя следующий фрагмент кода:if [ -e /etc/NetStatus.up ] ; then #move your existing collection in here fi
Почему?
Переименование — самый быстрый способ изменения статуса в любой ОС, включая системы на основе дискет, и он чрезвычайно прост в использовании. Я использовал указанную выше систему для получения статусов серверов, статусов резервного копирования, статусов вычислений от простых систем на основе MS-DOS до суперкомпьютеров.