Перейти к содержимому
Калькуляторы

Помогите написать скрипт таблетка от зависаний радиомодуля

Вобщем нужно написать скрипт, который будет определять значение LastActivity, и в случае если оно больше 500 - перезагружать роутер.

w2WgrUaJ.png

софт писал я лет 5 назад, и то на уровне начинающего, потому буду несколько дней разбираться. Может у кого свежий мозк, помогите плз?

 

на скорую руку набросал такое, но дает ошибку, пока не разобрался

 

while (true) do={:local creg [/in wi reg print count-only];
:local counts ($creg -1); 
:for x from=0 to=$counts do={:local a [/in wi reg get number=$x last-activity];
:if (a>=300) do={:put “run”;} else={:put “No run”;}}; delay 10}

Изменено пользователем MikroUser

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Может, просто, канальные скорости скоростей B режимов отключить? Иногда помогает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

НЕ помогает, помоему мы вопрос скоростей и их теста в соседней ветке бурно обсуждали и тестировали. Скрипт - последняя надежда. Вот толкьо почему он не работает, непонятно.

такое ощущение что не может извлечь last-activity, какбудьто в 6,4 сию функцию убрали! ((

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вобщем нужен мозк программирования, ибо тут без 100граммов не разберешся)

 

5hwDDYTc.png

 

получается что можно считать параметр last-activity. но он гад выводится в формате hh.mm.ss.mls

следовательно мы не можем выполнить :if (a>=300) do={... потому что переменная a - не есть целое число.

 

есть идея, обрезать последние 7 символов переменной $A , назначить переменную $b. вписать что-то на подобии :if (b>='00:01') do={... тогда по идее скрипт должен заработать без ошибок. но вот как отрезать последне 7 сиволов мой мозк еще не вспомнил. короче, думаем дальше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Полночи не поспал, помог себе сам.

Скрипт получился следующий

while (true) do={:local a [/in wi reg get number=0 last-activity]; :local b {[:pick $a +4]}; :put $b; :if (b=1) do={[/system reboot];} else={:delay 10;}};}

т.е. он читает значение минут, если последняя активность =1 минута(+59сек) значит радио подвисло и роутер надо перезагрузить. если активность меньше минуты - ждем 10 сек и выполнняем скрипт заново.

 

по идее должно работать :) но есть одно но, в терминале запустить сей скрипт - спрашивает подтверждение, перезагрузить или нет, и пока не нажмешь y он не перегружает. но на форуме микротика пишут что должно и так работать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.