Netwatch и глобальные переменные
Добавлено: 29 апр 2020, 01:45
? Как получить доступ из Netwatch до глобальных переменных ?
Вопрос становится интересным сам по себе (в сферическом вакууме). Но уж если Вы зануда и без практической задачи ни куда, то, например, такая постановка.
Задача:
1) тестировать несколько адресов
2) при появлении в сети (Up) послать сообщение в Telegram
3) при отключении (Down) записать в глобальную переменную дату+время падения и указывать ее в Telegram при подъеме. Так легко будет понятно сколько не было связи.
Для отправки сообщений в Telegram об Up и Down, да еще по нескольким адресам придется множество раз писать длинную строчку подключения. А уж как ее обслуживать потом (например, поменять)? Трудоемко. Естественное желание определить эту строку в глобальную переменную в одном месте и использовать потом во всех местах. где надо.
Но вот из Netwatch больше не получается даже считать глобальную переменную! Ибо для этого надо использовать права Policy 'policy'. (Как правильно обозвать это "масло масленое"?) А у Netwatch их отобрали! Об этом написано: RouterOS changelogs
• 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 просто убили ограничением по правам. Но раз есть инструмент и его не удалили, то значит он зачем-то еще нужен. И хочется научиться пользоваться им.
Вопрос становится интересным сам по себе (в сферическом вакууме). Но уж если Вы зануда и без практической задачи ни куда, то, например, такая постановка.
Задача:
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 просто убили ограничением по правам. Но раз есть инструмент и его не удалили, то значит он зачем-то еще нужен. И хочется научиться пользоваться им.