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

Помогите с скриптом

Добавлено: 19 авг 2015, 13:59
evgeniy7676
как изменить скрипт чтобы пинговались несколько хостов

:local PingCount 5;

:local CheckIp1 208.67.222.222;
:local CheckIp2 208.67.220.220;


:local isp1 [/ping $CheckIp1 count=$PingCount];
:local isp2 [/ping $CheckIp2 count=$PingCount];


:if (($isp1=0) && ($isp2=$PingCount) && ($BackGw=true)) do={

Добавлено:
Для каждого провайдера

Re: Помогите с скриптом

Добавлено: 19 авг 2015, 14:04
vqd
Ну если красиво то помести хосты в массив и пинговать потом попорядку.

Ну либо делайте что то типа

:local CheckIp1 208.67.222.222;
:local CheckIp2 208.67.220.220;

:local isp1Ip1 [/ping $CheckIp1 count=$PingCount];
:local isp1Ip2 [/ping $CheckIp2 count=$PingCount];

Ну и далее условие

Но учтите что данный скрипт довольно кривой и требует допиливания напильником конфига микрота

Re: Помогите с скриптом

Добавлено: 19 авг 2015, 14:09
evgeniy7676
а как условие будет выглядеть

Re: Помогите с скриптом

Добавлено: 19 авг 2015, 14:12
vqd
еще так можно
:local isp1 ([/ping $CheckIp1 count=$PingCount] + [/ping $CheckIp2 count=$PingCount]);

Re: Помогите с скриптом

Добавлено: 19 авг 2015, 14:14
evgeniy7676
У меня этот отлично работает нужно доработать чтобы по 2 хоста пинговал

:local PingCount 5;

:local CheckIp1 208.67.222.222;
:local CheckIp2 208.67.220.220;

:local eTo "admin@i.com";

:local rName [/system identity get name];
:local rDate [/system clock get date];
:local rTime [/system clock get time];
:local eSubj ($rName . " " . $rDate . " " . $rTime);

:local isp1 [/ping $CheckIp1 count=$PingCount];
:local isp2 [/ping $CheckIp2 count=$PingCount];

:local BackGw [/ip route get [find comment="gw2"] disable];
#if main ISP is DOWN and backup ISP is UP then:
:if (($isp1=0) && ($isp2=$PingCount) && ($BackGw=true)) do={
:log warning "Set routes to backup ISP";
/ip route disable [find comment="gw1"];
/ip route enable [find comment="gw2"];
/ip ipsec installed-sa flush;
/tool e-mail send to=$eTo subject=($eSubj . " Main ISP is DOWN") body="Set routes to backup ISP";
}

:local MainGw [/ip route get [find comment="gw1"] disable];
#if main ISP is UP then:
:if (($isp1=$PingCount) && ($MainGw=true)) do={
:log warning "Set routes to main ISP";
/ip route enable [find comment="gw1"];
/ip route disable [find comment="gw2"];
/ip ipsec installed-sa flush;
/tool e-mail send to=$eTo subject=($eSubj . " Main ISP is UP") body="Set routes to main ISP";
}

Re: Помогите с скриптом

Добавлено: 19 авг 2015, 14:16
vqd
для последнего вариант

:if ($isp1 = 0) do={/log warning "ISP1 DOWN"}
:if ($isp1 = 10) do={/log warning "ISP1 UP"}

Но условия будут постоянно гадить в лог, поэтому стоит использовать флаги типа:
:global OldIsp1
:global OldIsp2

.....

:if (($isp1 = 0) and ($OldIsp1 != $isp1)) do={/log warning "ISP1 DOWN"}
:if (($isp1 = 10) and ($OldIsp2 != $isp2)) do={/log warning "ISP1 UP"}

:set OldIsp1 $isp1
:set OldIsp2 $isp2

Таким образом событие отработает 1 раз

Re: Помогите с скриптом

Добавлено: 19 авг 2015, 14:21
vqd
Ну я же говорил что скрипт кривой )))

Сильно не вникал но видится мне что если дергануть пачкорд из микрота скрипт не увидит упавшего канала.


А дальше надо весь конфиг смотреть

Re: Помогите с скриптом

Добавлено: 19 авг 2015, 14:32
evgeniy7676
а где можно посмотреть на новую и желательно с маркировкой маршрутов

Re: Помогите с скриптом

Добавлено: 19 авг 2015, 14:38
vqd
evgeniy7676 писал(а):а где можно посмотреть на новую и желательно с маркировкой маршрутов


Посмотреть можно заказав мне данный скрипт.

С маркировкой можно так

:global googleM1 [ping 8.8.8.8 count=5 routing-table=lte1]

Re: Помогите с скриптом

Добавлено: 19 авг 2015, 17:59
KARaS'b
вот этим чудом, которое мне состряпали здесь же, на форуме, пинговал два хоста и проверял аптайм микротика

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

:local PingCount 3;
:local One xxx.xxx.xxx.xxx;
:local Too xxx.xxx.xxx.xxx;
:local ResultOne [/ping count=$PingCount $One interface=ether1];
:local ResultToo [/ping count=$PingCount $Too interface=ether1];
:local Uptime [/system resource get uptime];
:if ($ResultOne=0 && $ResultToo=0 && $Uptime>00:05:00) do={/system shutdown}