Страница 2 из 2
Re: Перестал работать скрипт после обновления ROS
Добавлено: 31 дек 2017, 02:10
EIKA
Кажется, дело в поиске имен конкретных интерфейсов. Как только подаются такие команды, Микротик отдает список всех возможных агрументов:
Код: Выделить всё
{{... /interface monitor-traffic [/interface find name=$ifName] once do={
{{{...
bonding ethernet l2tp-server ovpn-client pppoe-client sstp-client vlan blink enable print
bridge gre list ovpn-server pppoe-server sstp-server vpls comment export reset-counters
detect-internet ipip lte ppp-client pptp-client traffic-eng vrrp disable find set
eoip l2tp-client mesh ppp-server pptp-server virtual-ethernet wireless edit monitor-traffic
{{{... :global wanTrafTx (tx-bits-per-second / 1024);
{{{... }
{{... /interface monitor-traffic [/interface find name=$ifName] once do={
{{{...
bonding ethernet l2tp-server ovpn-client pppoe-client sstp-client vlan blink enable print
bridge gre list ovpn-server pppoe-server sstp-server vpls comment export reset-counters
detect-internet ipip lte ppp-client pptp-client traffic-eng vrrp disable find set
eoip l2tp-client mesh ppp-server pptp-server virtual-ethernet wireless edit monitor-traffic
{{{... :global wanTrafRx (rx-bits-per-second / 1024);
Re: Перестал работать скрипт после обновления ROS
Добавлено: 31 дек 2017, 03:03
Dragon_Knight
В синтаксисе ошибок больше не вижу.
На не своём железе отлаживать сложно, но вот вам совет, как это делаю я:
1) Во первых весь скрипт превращаю в одну строку (тут важный момент, т.к. должна КАЖДАЯ строка в конце иметь точку с запятой, даже на закрывающих скобках, например { :put $i }; )
2) Делаю точки отладки (вывод в консоль полученных данных, методом :put "отладка";) да, с учётом первого пункта это сложно, но иного пути я не знаю. Можно сначала сделать отладку а потмо превратить в одну строку.
3) Выполняю скрипт в консоле и смотрю что выводится. Это нам даст место, где всё затыкается. Далее нужно думать.
Код: Выделить всё
:global mailAddrTo "yourmail@dom.ru";:global mailAddrCopy "yourbackupmail@dom2.com";:global sec 3;:local cnt 10;:local cntOkRes 1;:local host1 ya.ru;:local host2 8.8.
8.8;:global cpu100 0;for x1 from=1 to=$sec do={:if ( [/system resource get cpu-load]="1") do={ :global cpu100 ($cpu100+1);};:delay 1;};:if ( $cpu100 = $sec ) do={/tool e-mail send to=$mailAddrTo cc=
$mailAddrCopy body="Within $sec seconds, CPU load on Mikrotik was 100%. Mikrotik will be restarted!" subject="$[/system identity get name]. Mikrotik CPU load was 100% on $[/system clock get time] $[/sys
tem clock get date]";:delay 20;/system reboot;};if ([/ip route find where dst-address=0.0.0.0/0] = "") do={:log warning "No default gateway! USB port will be power cycled!";/system routerboard usb powe
r-reset duration=5s;:delay 25;};:local defGw [/ip route get [/ip route find where dst-address=0.0.0.0/0] gateway];:global ifName [/ip address get [/ip address find where network=$defGw] interface];:glob
al wanTrafTx "0";:global wanTrafTxRes "0";:global wanTrafRx "0";:global wanTrafRxRes "0";for x from=1 to=5 do={/interface monitor-traffic [/interface find name=$ifName] once do={ :global wanTrafTx (tx
-bits-per-second / 1024);};/interface monitor-traffic [/interface find name=$ifName] once do={ :global wanTrafRx (rx-bits-per-second / 1024);};if ($wanTrafTx > $wanTrafTxRes) do={ :global wanTrafTxR
es $wanTrafTx;};if ($wanTrafRx > $wanTrafRxRes) do={ :global wanTrafRxRes $wanTrafRx;};:delay 1;};if ($wanTrafTxRes < 30000 and $wanTrafRxRes < 30000) do={:local cntRes1 [/ping count=$cnt $host1];:loc
al cntRes2 [/ping count=$cnt $host2];if ($cntRes1 < $cntOkRes and $cntRes2 < $cntOkRes) do={ :local logmsg ("Internet connection fail! \n\nCPU Load: ".[/system resource get cpu-load]."% \nWAN speed
RX: ".[:tonum $wanTrafRxRes]." kbit/s \nWAN speed TX: ".[:tonum $wanTrafTxRes]." kbit/s \nHost - ".[:tostr $host1]." lost ".[:tonum $cnt] - [:tonum $cntRes1]." packets of ".[:tostr $cnt]." \nHost - ".[
:tostr $host2]." lost ".[:tonum $cnt] - [:tonum $cntRes2]." packets of ".[:tostr $cnt]."\n"); :log info $logmsg; /interface ppp-client disable [/interface ppp-client find name=$ifName]; :
delay 10; execute "/system script run \"modemStatus\""; :delay 5s; :global modemStatus; /interface ppp-client enable [/interface ppp-client find name=$ifName]; :delay 20;
/tool e-mail send to=$mailAddrTo cc=$mailAddrCopy body="$logmsg$modemStatus" subject="$[/system identity get name]. Internet connection fails! $[/system clock get time] $[/system clock get date]" }};
Re: Перестал работать скрипт после обновления ROS
Добавлено: 31 дек 2017, 04:06
Kato
после обновления ROS
с какой на какую обновили? Читайте изменения и в соответствии с изменениями корректируйте скрипт
Re: Перестал работать скрипт после обновления ROS
Добавлено: 31 дек 2017, 12:16
EIKA
Kato писал(а):после обновления ROS
с какой на какую обновили? Читайте изменения и в соответствии с изменениями корректируйте скрипт
Спасибо, кэп. Но это как бы через чур очевидно, но проблема в том, что скрипту 2 года, и за это время в ROS чего только не наколбасили.
Re: Перестал работать скрипт после обновления ROS
Добавлено: 31 дек 2017, 12:19
EIKA
Dragon_Knight писал(а):В синтаксисе ошибок больше не вижу.
На не своём железе отлаживать сложно, но вот вам совет, как это делаю я:
1) Во первых весь скрипт превращаю в одну строку (тут важный момент, т.к. должна КАЖДАЯ строка в конце иметь точку с запятой, даже на закрывающих скобках, например { :put $i }; )
2) Делаю точки отладки (вывод в консоль полученных данных, методом :put "отладка";) да, с учётом первого пункта это сложно, но иного пути я не знаю. Можно сначала сделать отладку а потмо превратить в одну строку.
3) Выполняю скрипт в консоле и смотрю что выводится. Это нам даст место, где всё затыкается. Далее нужно думать.
Спасибо.
Т.е. экраны с n и t - это штатно, и не является косяком?
1. В чем смысл переноса в одну строку?
1.1. Что делать с put $i не понял, в вашем коде нет такого.
2. Чем это лучше, чем просто построчный paste в консоль?
3. В консоли у меня скрипт проходит целиком, и я там ничего не не вижу. Единственное, что смущало, я привел на скринах выше.
P.S.
А в чем сложность отладки на своем железе? Достаточно любого PPP-интерфейса в системе, код унифицирован под поиск имени.
Re: Перестал работать скрипт после обновления ROS
Добавлено: 31 дек 2017, 19:48
EIKA
Значит так. Построчный прогон скрипта (с переносом строк) ошибок не дает. Но после третьей закрывабщей скобки, спустя несколько секунд выводится: No such item. Эта ошибка указывает не нечто динамическое, что существовало и потом перестало существовать. Внимание, вопрос - как найти это место поточнее?
Прогон скрипта в версии от Dragon_Knight дает ошибку в переменной Within $sec.
Re: Перестал работать скрипт после обновления ROS
Добавлено: 31 дек 2017, 20:45
Dragon_Knight
Через каждую строчку написать :put "отладка1";, :put "отладка2"; .... :put "отладка999"; и посмотреть где остановится..
Re: Перестал работать скрипт после обновления ROS
Добавлено: 31 дек 2017, 21:03
podarok66
EIKA писал(а):Прогон скрипта в версии от Dragon_Knight дает ошибку в переменной Within $sec.
Эта строка вселяет в меня уверенность, что ТС вообще к данному скрипту не имеет никакого отношения и просто копипастит без раздумий всё подряд. Нет там такой переменной. Вообще. Есть переменная $sec, изначально со значением 3, а то, что он привел - часть строки из тела письма )))
С Новым годом, с новым счастьем, товарищи!