Не выполняется шедулер при включении/перезагрузке

Раздел для тех, кто начинает знакомиться с MikroTik
Правила форума
Как правильно оформить вопрос.
Прежде чем начать настройку роутера, представьте, как это работает. Попробуйте почитать статьи об устройстве интернет-сетей. Убедитесь, что всё, что Вы задумали выполнимо вообще и на данном оборудовании в частности.
Не нужно изначально строить Наполеоновских планов. Попробуйте настроить простейшую конфигурацию, а усложнения добавлять в случае успеха постепенно.
Пожалуйста, не игнорируйте правила русского языка. Отсутствие знаков препинания и неграмотность автора топика для многих гуру достаточный повод проигнорировать топик вообще.

1. Назовите технологию подключения (динамический DHCP, L2TP, PPTP или что-то иное)
2. Изучите темку "Действия до настройки роутера".
viewtopic.php?f=15&t=2083
3. Настройте согласно выбранного Вами мануала
4. Дочитайте мануал до конца и без пропусков, в 70% случаев люди просто не до конца читают статью и пропускают важные моменты.
5. Если не получается, в Winbox открываем терминал и вбиваем там /export hide-sensitive. Результат в топик под кат, интимные подробности типа личных IP изменить на другие, пароль забить звездочками.
6. Нарисуйте Вашу сеть, рисунок (схему) сюда. На словах может быть одно, в действительности другое.
dieasba
Сообщения: 11
Зарегистрирован: 09 июл 2018, 19:59

Приветствую зашедших. Написал первые на микротике два макроса и столкнулся с проблемой, что шедулер не выполняет их при включении(только через указанный интервал). Суть скриптов: первый должен выполнится при включении и каждые 15 минут после и служит для проверки IP(серый или белый). Второй скрипт активируется если первый макрос выявил серый IP и выполняется раз в 10 секунд до тех пор пока IP не станет белым и затем прекращает работу. Где ошибся?

 Первый
#Every 15 minutes
:local "InterfaceName" RT-ISP
:local "StatusPPPoE"
:local "WanIP" [:pick [/ip address get [find interface=$InterfaceName] address ] 0 7]
:local "Scheduler" UpdateWanIP
:local "StatusScheduler" [/system scheduler get UpdateWanIP disabled]

/interface pppoe-client monitor RT-ISP once do={:set StatusPPPoE "$status"}

:if ($StatusPPPoE = "connected") do={
/tool fetch mode=http address="checkip.dyndns.org" src-path="/" dst-path="/dyndns.checkip.html"
:local result [/file get dyndns.checkip.html contents]
:local resultLen [:len $result]
:local startLoc [:find $result ": " -1]
:set startLoc ($startLoc + 2)
:local endLoc [:find $result "</body>" -1]
:local currentIP [:pick $result $startLoc $endLoc]
:local "PublicIP" [:pick [$currentIP] 0 7]
#:log info "$PublicIP / $WanIP"

:if ($PublicIP != $WanIP) do={
:if ($StatusScheduler = true) do={
/system scheduler enable $Scheduler
#:log info "Scheduler enable"
}}

:if ($PublicIP = $WanIP) do={
:if ($StatusScheduler = false) do={
/system scheduler disable $Scheduler
#:log info "Scheduler disable"
}}

}

:if ($StatusPPPoE != "connected") do={
:delay 5s;
:log info "$InterfaceName != connected"
/system script run CheckWanIP
}
 Второй
#Every 10 seconds if WanIP != PublicIP
:local "InterfaceName" RT-ISP
:local "StatusPPPoE"
:local "WanIP" [:pick [/ip address get [find interface=$InterfaceName] address ] 0 7]
:local "Scheduler" UpdateWanIP
:local "StatusScheduler" [/system scheduler get UpdateWanIP disabled]

/interface pppoe-client monitor RT-ISP once do={:set StatusPPPoE "$status"}

:if ($StatusPPPoE = "connected") do={

/tool fetch mode=http address="checkip.dyndns.org" src-path="/" dst-path="/dyndns.checkip.html"
:local result [/file get dyndns.checkip.html contents]
:local resultLen [:len $result]
:local startLoc [:find $result ": " -1]
:set startLoc ($startLoc + 2)
:local endLoc [:find $result "</body>" -1]
:local currentIP [:pick $result $startLoc $endLoc]
:local "PublicIP" [:pick [$currentIP] 0 7]
#:log info "$PublicIP / $WanIP"

:if ($WanIP = $PublicIP) do={
:if ($StatusScheduler = false) do={
/system scheduler disable $Scheduler
}}

:if ($WanIP != $PublicIP) do={
/interface disable $InterfaceName
#:log info "$InterfaceName is OFF"
:delay 5s;
/interface enable $InterfaceName
#:log info "$InterfaceName is ON"
}

}
Вложения
Sched.png
Sched.png (13.42 КБ) 4234 просмотра


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Поле On Envent должно содержать команду вида /system script run WanIP, а не просто имя скрипта....


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
dieasba
Сообщения: 11
Зарегистрирован: 09 июл 2018, 19:59

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


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Каким образом? Выражайтесь яснее.
Что есть шедулер? По сути это таймер запуска команды, аналог cron'а в Linux. Только более простой и понятный. Принцип же запуска абсолютно такой же.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
dieasba
Сообщения: 11
Зарегистрирован: 09 июл 2018, 19:59

CheckUpdateWanIP выполняется если в поле "On Event" прописать только наименование макроса но только по истечении 15 минут но никак не при включении. Быть может я ошибался, что "startup" вовсе не предполагает включение маршрутизатора?


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Перечитал Вики, да, там указывают, что можно просто имя скрипта указывать. Странно, вот не помню, что было ранее. Сделайте в терминале команду /system scheduler export и вывод сюда. И повнимательнее там с именами, у вас то CheckWanIP, то CheckUpdateWanIP, не понятно, какое имя правильное


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
dieasba
Сообщения: 11
Зарегистрирован: 09 июл 2018, 19:59

add disabled=yes interval=10s name=UpdateWanIP on-event="WanIP" \
policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \
start-time=startup
add interval=15m name=CheckUpdateWanIP on-event=CheckWanIP policy=\
ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-time=\
startup

Проверил, с именами похоже, что всё в норме. Проблема только в отсутствии запуска шедулера CheckUpdateWanIP после включения либо перезагрузки маршрутизатора. А логику которую реализовал выглядит так: шедулер CheckUpdateWanIP - макрос CheckWanIP - шедулер UpdateWanIP - макрос WanIP - выключение шедулера UpdateWanIP если цель достигнута.


Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

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


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
dieasba
Сообщения: 11
Зарегистрирован: 09 июл 2018, 19:59

Не помогло. Даже значение счётчика "Run Count" не изменилось. Видимо осталось только посочувствовать мне.
Дополнение: шедулер сработал после перезагрузки если установить значение интервала = 0. Видимо придётся сделать ещё один шедулер который уже запустит мою логику. Ладно. И так сойдёт. Благодарю за поиски истины.


KARaS'b
Сообщения: 1199
Зарегистрирован: 29 сен 2011, 09:16

Некоторые модели адекватно стартуют спустя минуту. Выставьте задержку на это время а потом опытным путем подберите время.
З.Ы. Х86 машина с рос, в винбокс могу попасть только спустя полторы минуты, т.е. после логина в него я вижу аптайм больше полторы минуты, но соединения с самим шлюзом все это время установить нельзя, он еще не полностью запустился.


Ответить