Работа с глобальными переменными (для IPsec-соединений)

Обсуждение ПО и его настройки
vomus
Сообщения: 48
Зарегистрирован: 28 окт 2013, 22:00

vqd писал(а):винбоксом работайте. Там все хорошо


Тот же самый эффект. Запускаешь в косоли - ок. Запускаешь в Winbox'е - нет. Причем, что странно, скрипт, будучи запущен в winbox'е (да и в веб-интерфейсе), отрабатывает так, как будто запущен совершенно отдельный его экземпляр в каком-то собственном окружении: значение глобальной переменной, видимое из /system/script/environment не выводится, а выводится null. Как будто он в этом окружении инициализирует переменную null'ом. Может это баг (у меня 6.11).


vqd
Модератор
Сообщения: 3605
Зарегистрирован: 26 сен 2013, 14:20
Откуда: НСК
Контактная информация:

ну я этот скрипт тестировал тоже на 6.11
Проблем не было, все писалось в переменные.

Вы смотрите значение переменной средствами винбокса.


Есть интересная задача и бюджет? http://mikrotik.site
vomus
Сообщения: 48
Зарегистрирован: 28 окт 2013, 22:00

vqd писал(а):ну я этот скрипт тестировал тоже на 6.11
Проблем не было, все писалось в переменные.

Вы смотрите значение переменной средствами винбокса.


Вот странно. :ki_ss: Почему такая разница?


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

Вот такое работает гарантированно у меня:

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

:global b;
:log info "Variable $b";
:set $b "test1";


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
ERge
Сообщения: 12
Зарегистрирован: 02 фев 2016, 03:52

я конечно извиняюсь за "некрофилию", но сейчас декабрь 2018г, прошивка 6.43.7 и такая же ерунда!

если устанавливать переменную в терминале например

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

:global var1
:set var1 "X"
то тут все нормально, она есть в переменных окружения, из другого терминала тоже все доступно.
и если запускать скрипт Из терминала, то он ее видит, все норм.

Но вот если же скрипт запускать по кнопке Run Script из Script List или по шедулеру, то данная переменная всегда пустая, даже если она устанавливается в скрипте !?

эм...
это каг???
вот действительно буд-то в своем окружении запскается...
vomus писал(а): 04 апр 2014, 14:32 отрабатывает так, как будто запущен совершенно отдельный его экземпляр в каком-то собственном окружении: значение глобальной переменной, видимое из /system/script/environment не выводится, а выводится null. Как будто он в этом окружении инициализирует переменную null'ом.
как тогда пользоваться глобальными переменными?
нужно чтобы скрипт запускаемый по шедулеру видел глобальную переменную, как ее передавать?
может в самом скрипте еще что-то надо???


ERge
Сообщения: 12
Зарегистрирован: 02 фев 2016, 03:52

если в скрипте сделать следующий вывод

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

:global var1
:log info [:typeof $var1]
то, не смотря на то что переменная была объявлена в терминале, и даже переопределяется в скрипте, каждый раз при запуске скрипта на это строке он выводит nothing !?


Niblerjkee
Сообщения: 18
Зарегистрирован: 26 ноя 2018, 13:59

Такая же ерунда. Запускаю скрипт через Winbox, переменные определяются. Запускаю скрипт netwatch- ем :log info [$var] пустая строка!


vqd
Модератор
Сообщения: 3605
Зарегистрирован: 26 сен 2013, 14:20
Откуда: НСК
Контактная информация:

Скрипт весь покажите ))

Собственно тут логично
:global var1
:log info [:typeof $var1]

Если ранее переменная не была определена то она определяется в этом скрипте и она пустая, о чем микрот в логе и пишет.


Есть интересная задача и бюджет? http://mikrotik.site
Niblerjkee
Сообщения: 18
Зарегистрирован: 26 ноя 2018, 13:59

Собственно три скрипта.

####Startup#####
:global ISP1down false;
:log info [$ISP1down]
/log warning "Startup, set ISPdown false"

####NetwatchDown#####
:global ISP1down
:log info [$ISP1down]
:local checkip [/ping 7.7.7.7 count=1]
:if (checkip = 0) do={
/ip route set distance=3 [find comment="ISP1"]
:set $ISP1down true
/log warning "NetwatchDown, Switch to ISP2, set ISPdown true"
} else={/log warning "loznaya trevoga"}
:log info [$ISP1down]

#######NetwatchUP#####
:global ISP1down
:log info [$ISP1down]
:if ($ISP1down = true) do={
/ip route set distance=1 [find comment="ISP1"]
:set $ISP1down false;
/log warning "NetwatchUP, Switch back to ISP1, set ISPdown false"
} else={/log warning "NetwatchUP, nothing to do"}


vqd
Модератор
Сообщения: 3605
Зарегистрирован: 26 сен 2013, 14:20
Откуда: НСК
Контактная информация:

фу блин Честно, считаю такое решение по резервированию отвратительным поэтому править не буду.

Приведите скрипт в надлежащий вид ибо ОНО у вас в принципе не рабочее

1. [ bla bla] - это вызов функции
2. в одном месте вы пишите :log в другом /log
3. в одном месте вы данные берете из переменной, в другом из какова то checkip
4. почитайте про set - он тоже неправильно описан


Есть интересная задача и бюджет? http://mikrotik.site
Ответить