Страница 1 из 2
Не выполняется шедулер при включении/перезагрузке
Добавлено: 09 июл 2018, 21:07
dieasba
Приветствую зашедших. Написал первые на микротике два макроса и столкнулся с проблемой, что шедулер не выполняет их при включении(только через указанный интервал). Суть скриптов: первый должен выполнится при включении и каждые 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"
}
}
Re: Не выполняется шедулер при включении/перезагрузке
Добавлено: 09 июл 2018, 21:16
podarok66
Поле On Envent должно содержать команду вида /system script run WanIP, а не просто имя скрипта....
Re: Не выполняется шедулер при включении/перезагрузке
Добавлено: 09 июл 2018, 21:19
dieasba
Почему он тогда таким образом выполняется?
Re: Не выполняется шедулер при включении/перезагрузке
Добавлено: 09 июл 2018, 21:33
podarok66
Каким образом? Выражайтесь яснее.
Что есть шедулер? По сути это таймер запуска команды, аналог cron'а в Linux. Только более простой и понятный. Принцип же запуска абсолютно такой же.
Re: Не выполняется шедулер при включении/перезагрузке
Добавлено: 09 июл 2018, 21:49
dieasba
CheckUpdateWanIP выполняется если в поле "On Event" прописать только наименование макроса но только по истечении 15 минут но никак не при включении. Быть может я ошибался, что "startup" вовсе не предполагает включение маршрутизатора?
Re: Не выполняется шедулер при включении/перезагрузке
Добавлено: 09 июл 2018, 22:05
podarok66
Перечитал Вики, да, там указывают, что можно просто имя скрипта указывать. Странно, вот не помню, что было ранее. Сделайте в терминале команду /system scheduler export и вывод сюда. И повнимательнее там с именами, у вас то CheckWanIP, то CheckUpdateWanIP, не понятно, какое имя правильное
Re: Не выполняется шедулер при включении/перезагрузке
Добавлено: 09 июл 2018, 22:23
dieasba
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 если цель достигнута.
Re: Не выполняется шедулер при включении/перезагрузке
Добавлено: 09 июл 2018, 23:26
podarok66
Смотрите, вполне вероятно, что скрипт отрабатывает, но вот вся беда в том, что скрипт при таком раскладе стартует через три секунды после старта системы. А за это время интернет-соединение может еще не активироваться и результатом вашего скрипта будет пшик. Вы попробуйте в самое начало скрипта поставьте задержку секунд 20. Возможно причина в этом...
Re: Не выполняется шедулер при включении/перезагрузке
Добавлено: 10 июл 2018, 18:40
dieasba
Не помогло. Даже значение счётчика "Run Count" не изменилось. Видимо осталось только посочувствовать мне.
Дополнение: шедулер сработал после перезагрузки если установить значение интервала = 0. Видимо придётся сделать ещё один шедулер который уже запустит мою логику. Ладно. И так сойдёт. Благодарю за поиски истины.
Re: Не выполняется шедулер при включении/перезагрузке
Добавлено: 10 июл 2018, 19:30
KARaS'b
Некоторые модели адекватно стартуют спустя минуту. Выставьте задержку на это время а потом опытным путем подберите время.
З.Ы. Х86 машина с рос, в винбокс могу попасть только спустя полторы минуты, т.е. после логина в него я вижу аптайм больше полторы минуты, но соединения с самим шлюзом все это время установить нельзя, он еще не полностью запустился.