Страница 1 из 1

Скрипт проверки работоспособности lte-каналов в Интернет

Добавлено: 02 дек 2020, 14:03
Sertik
Сделан для того, чтобы если пропал Интернет через LTE - отключить канал, чтобы не висел и не перебивал маршруты резервных каналов при не настроенных маркировках и балансировках. При появлении Инета (при повторной проверке) восстанавливает работоспособность канала.

Маршруты в Интернет для LTE-интерфейсов роутера должны быть настроены. Скрипт это не проверяет.
Тестируйте, может где ошибся.
Вроде работает.

Ищет все LTE-интерфейсы роутера. При нахождении смотрит включен ли интерфейс, если не включен включает временно для проверки. Делаем паузу 20 сек.
Потом - тестирует пингом 8.8.8.8. Если пинг есть - всё океy. Если пинга нет - ждет статус lte-интерфейса, пока хоть какой-нибудь статус не появится.
При появлении статуса, даже если он не нормальный, всё равно опять пингуем 8.8.8.8. Если пинг есть - ОК. Если пинга опять нет - считаем что доступа в Интернет через этот lte-интерфейс нет (кончились деньги, проблемы у оператора и т.д...) и выключаем его до следующей проверки.
Повторяем всю байду с каждым, найденным lte-интерфейсом.
После работы скрипта - "живые" lte-интерфейсы включаются, если были выключены и остаются жить.
Не рабочие - отключаются.

Можно поставить в крон с нужным повторением в надежде ,что связь появится (кто-нибудь даст денег :-)

В скрипте, возможно есть лишние проверки ..., главное чтобы работал.

Код: Выделить всё

#------------------------------------------------------------------------------------------------------
# Скрипт проверки/восстановления работоспособности LTE
#                     by Sertik 02/12/2021
#------------------------------------------------------------------------------------------------------

:local lteIs [:toarray ""]
:local ltenum 0

# Находим перебором все lte-интерфейсы и помещаем их имена в массив $lteIs
:foreach counter in=[/interface lte find] do={
:set ($lteIs->$ltenum) [/interface lte get $counter name];
:set $ltenum ($ltenum+1)
}

:if ([:len $lteIs]!=0) do={
   :log info ""
    :log warning ("Роутер "."$[/system identity get name] "."lte-модемов: "."$[:len $lteIs]")
    :local ltecmd
    :local Ltestatus
    :local typepar "registration-status";
#:local ltenum [:len $lteIs]
    :local ltename
         :while ($ltenum!=0) do={
#:set $ltename ("lte"."$[:tostr $ltenum]")
              :set $ltename [pick $lteIs ($ltenum-1)];: log warning ("Проверка интерфейса "."$ltename "."....")
                   :if ([/interface lte get $ltename disabled]) do={:log warning "Lte-интерфейс $ltename был отключен. Включаем его для проверки ..."; [/interface lte enable $ltename];
                      :log warning "Lte-интерфейс $ltename включен. Ожидаем инициализацию модема ..."; :delay 20s;}
                           :if ([/ping 8.8.8.8 interface=$ltename count=5]>2) do={:log info "Модем активен и подключен. Есть выход в Интернет через $ltename"; :set $ltenum ($ltenum-1);}
                           :if ([/ping 8.8.8.8 interface=$ltename count=5]=0) do={
                                :if (![/interface lte get $ltename disabled]) do={
                                  # get Lte modem status
                                  :set ltecmd [/interface lte info $ltename once as-value]
                                  :set Ltestatus ($ltecmd->$typepar);
                                  :do {:delay 1s; :set Ltestatus ([/interface lte info $ltename once as-value]->"$typepar")} while=([:len ([/interface lte info $ltename once as-value]->"$typepar")]=0)
                                       :if (($Ltestatus="registered") && ([/ping 8.8.8.8 interface=$ltename count=5]>2)) do={:log warning "Появление доступа в интернет через $ltename"} else={ 
                                            :if (($Ltestatus="registered") or ($Ltestatus="unknown") or ($Ltestatus="not searching") or ($Ltestatus="denied")) do={
                                            :log error "Lte интерфейс $ltename активен, но не пингует 8.8.8.8 - отключаем его ...."
                                                :if ([/ping 8.8.8.8 interface=$ltename count=5]>2) do={:log warning "Появление доступа в Интернет на интерфейсе $ltename. Оставлен включенным"} else={
                                                [/interface lte disable $ltename];}
                 :log info "Скрипт отключил интефейс $ltename"} else={:log warning "Lte интерфейс $ltename активен, его статус не определён, возможно идёт настройка соединения ... ";}
                                     }
                                 } else={log info "Lte интерфейс $ltename в системе отключен"}
:set $ltenum ($ltenum-1);}
               }
 } else={:log warning "LTE-интерфейсы не найдены"}

:log warning "Проверка LTE-интерфейсов окончена"

Re: Скрипт проверки работоспособности lte-каналов в Интернет

Добавлено: 16 апр 2024, 11:40
Dominik
ROS 7.14.2 on SXT R
---------------------------------
Перестал работать скрипт

Изображение

Далее ничего не происходит

Re: Скрипт проверки работоспособности lte-каналов в Интернет

Добавлено: 17 апр 2024, 11:30
Sertik
И что ? Вы мне предлагаете Вам скрипт поправить ?
Читайте руководства, учитесь и вперед с песнями ...

Re: Скрипт проверки работоспособности lte-каналов в Интернет

Добавлено: 17 апр 2024, 18:34
podarok66
Dominik писал(а): 16 апр 2024, 11:40 ROS 7.14.2 on SXT R
---------------------------------
Перестал работать скрипт

Изображение

Далее ничего не происходит
Дата публикации скрипта декабрь 2020 года, дата выхода 7.1 - декабрь 2021 года. То есть автор практически со стопроцентной вероятностью писал под шестую версию. Думаю, что править под семерку он его не будет пока (если судить по ответу). Так что, если есть необходимость, то самостоятельно переписывайте. Не думаю, что там много подводных камней.