Вопрос становится интересным сам по себе (в сферическом вакууме). Но уж если Вы зануда и без практической задачи ни куда, то, например, такая постановка.
Задача:
1) тестировать несколько адресов
2) при появлении в сети (Up) послать сообщение в Telegram
3) при отключении (Down) записать в глобальную переменную дату+время падения и указывать ее в Telegram при подъеме. Так легко будет понятно сколько не было связи.
Для отправки сообщений в Telegram об Up и Down, да еще по нескольким адресам придется множество раз писать длинную строчку подключения. А уж как ее обслуживать потом (например, поменять)? Трудоемко. Естественное желание определить эту строку в глобальную переменную в одном месте и использовать потом во всех местах. где надо.
Код: Выделить всё
/ tool fetch url="https://api.telegram.org/bot<You:Tocen>/sendMessage?chat_id=&text=Bla-Bla-Bla"
• V6.42 *) netwatch - limit to read, write, test and reboot policies for Netwatch script execution;
• V6.43 *) console - added error log message when netwatch tries to execute script with insufficient permissions;
Вот и возник вопрос: Как получить доступ из Netwatch до глобальных переменных?
Я много потратил времени, провел экспериментов, и нащупал один путь. Немного кривоватый, но работающий на 'RouterOS v6.46.5 (stable)".
Минусы:
- Правильнее назвать это глобальная «константа», а не «переменная». Значение задается в едином месте, а используется во многих. Но вот изменить его можно только изменив программу. (Написать Script_Write, изменяющий скрипт, для функции FuncZ, вызванной из другого скрипта script1, который вызван из Netwatch? …. Это возможно и заработает, но выглядит уж очень заумно)
- Можно только читать глобальные переменные/константы. Но изменять (или удалять) их не получится.
- Сразу из Netwatch невозможно запустить функцию FuncZ. Ошибку не выдаст, но и результата не будет.
- Во всех скриптах и функции надо ставить галочку dont-require-permissions = yes
- Я не совсем красиво выполню задачу: Да, я отправлю Up сообщение «Поднялся IP=x.x.x.x» я смогу. Но не получится ни дописать «…. который упал в ЧЧ:ММ», ни сбросить глобальную переменную Down_HHMM.
- Хотя бы раз надо запустить скрипт FuncZ на выполнение функции вне Netwath, что бы создалась глобальная переменная gv для прочих скриптов. Например, при запуске роутера или подъеме WAN.
В этом способе много минусов, но другого я пока не нашел. Подскажите, как можно получить доступ из Netwatch до глобальных переменных?
Послесловие_1. Я знаю, что конкретно эту задачу можно решить повторив работу Netwatch на скриптах + периодический запуск. Пожалуйста, не надо уводить разговор на эту тему. Вопрос я задал в самом начале, остальное лишь пример.
Послесловие_2. Мне кажется, что Netwatch просто убили ограничением по правам. Но раз есть инструмент и его не удалили, то значит он зачем-то еще нужен. И хочется научиться пользоваться им.