Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Форум
    RouterOS
    Чтобы сохранить значения переменных после перезагрузки.

    Чтобы сохранить значения переменных после перезагрузки.

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Чтобы сохранить значения переменных после перезагрузки., RouterOS
     
    RoddyZ
    Guest
    #1
    0
    22.03.2006 14:15:00
    Кто-нибудь знает, как сохранить значения переменных после перезагрузки MT, чтобы сохранять эти значения на диске? -Roddy
     
     
     
    WeWiNet
    Guest
    #2
    0
    01.12.2020 18:28:00
    Сожалею, но половина форума использует L7 как переменные. Если есть лучший способ, пожалуйста, выложите пример. И, кстати, подсчёт трафика LTE в качестве такой переменной должен быть встроен в ROS…
     
     
     
    mrz
    Guest
    #3
    0
    01.12.2020 14:40:00
    Записывать переменные в скрипт запуска планировщика — это гораздо лучший вариант, чем писать их в правилах l7 и прочей ерунде.
     
     
     
    Jotne
    Guest
    #4
    0
    01.12.2020 16:47:00
    Как вообще хранить переменную в секции скрипта менее безумно, чем хранить ее в правиле l7? Можешь выложить пример? Почему бы просто не сохранять переменную после перезагрузки, если она хранится как глобальная?
     
     
     
    Larsa
    Guest
    #5
    0
    01.12.2020 17:36:00
    :persistent variable или… :global::persistent variable
     
     
     
    tishri
    Guest
    #6
    0
    01.12.2020 12:31:00
    Иногда тебе нужны переменные, которые сохраняются даже после перезагрузки. Например, скрипт, который перезагружается, если интернет-соединение потеряно или обнаручена определенная атака. Тебе нужно отслеживать количество перезагрузок, чтобы скрипт в конце концов перестал перезагружаться сам.
     
     
     
    cmit
    Guest
    #7
    0
    22.03.2006 14:54:00
    Просто идея (не проверенная): в твоём скрипте создай ещё один скрипт, который будет устанавливать значение (глобальной) переменной, которую ты хочешь сохранить, в её текущее значение. Затем создай запись в планировщике для выполнения этого скрипта только один раз при запуске (это, вроде как, должно работать?!). Каждый раз, когда переменная меняется, удаляй скрипт "я пересоздаю переменную" и пересоздавай его, чтобы он устанавливал переменную в новое значение. Кстати, было бы неплохо иметь консольную команду для записи чего-нибудь произвольного в файл (как команда :log, только с дополнительным параметром "file" и возможностью выбора между добавлением и перезаписью). С уважением, Christian Meis
     
     
     
    RoddyZ
    Guest
    #8
    0
    22.03.2006 23:14:00
    Нашел новый способ с помощью цепочек брандмауэра. Замени `variable_name` на настоящее имя твоей переменной, а `variable_value` — на его значение.

    Чтобы создать новую переменную:
    `/ip firewall filter add chain=variables comment=variable_name content=variable_value`

    Чтобы прочитать значение переменной:
    `:put [/ip firewall filter get [find chain=variables comment=variable_name] content]`

    Чтобы обновить значение переменной:
    `/ip firewall filter set [find chain=variables comment=variable_name] content new_value`

    Чтобы удалить переменную:
    `/ip firewall filter remove [find chain=variables comment=variable_name]`

    Цепочка "variables" никогда не выполняется, избегает нагрузки на процессор. -RoddyZ
     
     
     
    cmit
    Guest
    #9
    0
    23.03.2006 09:35:00
    Отличный, тоже. С наилучшими пожеланиями, Christian Meis.
     
     
     
    RoddyZ
    Guest
    #10
    0
    23.03.2006 22:46:00
    cmit: Думаю над твоей идеей скрипта, и создал следующий скрипт, чтобы воссоздать все глобальные переменные при старте, используя планировщик autoexec (вроде: http://forum.mikrotik.com//viewtopic.php?t=1611&highlight=autoexec). :foreach i in=[/ip firewall filter find chain=variables] do={ :log info ("Загрузка переменных: " . [/ip firewall filter get $i comment] . “=” . [/ip firewall filter get $i content] ) :global [/ip firewall filter get $i comment] [/ip firewall filter get $i content] } Но, лучше иметь более эффективный способ сохранения переменных. Команда MT, пожалуйста, обратите внимание… -RoddyZ
     
     
     
    BuayaDarat
    Guest
    #11
    0
    29.05.2014 06:34:00
    Я бы использовал [/ip firewall layer7-protocol] вместо [/ip firewall filter], потому что это безопаснее и случайно не нарушит правила фильтрации, да и регулярные выражения могут хранить больше данных.
     
     
     
    palii
    Guest
    #12
    0
    20.04.2019 17:06:00
    13 лет спустя. Ну, я написал функцию, которая читает и пишет постоянные переменные как layer7-протоколы:
    :global persist do={

       :local varName $1
       :local varValue $2
       :local varID [/ip firewall layer7-protocol find name="$varName"]

       :if ([:typeof $varValue] = "nothing") do={
           :if ($varID != "") do={
               :set $varValue [/ip firewall layer7-protocol get $varID value-name=regexp]
           }
       } else={
           :if ($varID = "") do={
               /ip firewall layer7-protocol add name="$varName" regexp="$varValue"
           } else={
               /ip firewall layer7-protocol set $varID regexp="$varValue"
           }
       }

       return $varValue

    } Примеры использования: (name = имя переменной, value = значение переменной) $persist name = Чтение постоянной переменной $persist name value = Запись постоянной переменной :global name [$persist name] = Чтение постоянной переменной и запись её в глобальную переменную :global name [$persist name value] = Запись данных в глобальную переменную и в постоянную переменную одновременно Заметки: Функция использует layer7-протоколы для хранения постоянных данных. Все данные, прочитанные из постоянного хранилища, будут строками. Функция всегда возвращает значение.
     
     
     
    Jotne
    Guest
    #13
    0
    20.04.2019 19:27:00
    Даже не видел этого раньше. Ну почему на свете RuterOS не сохраняет глобальные переменные после перезагрузки? Это должно быть простым делом для MT, чтобы реализовать??? Так что MT, пожалуйста, примите это как запрос.
     
     
     
    SiB
    Guest
    #14
    0
    01.12.2020 20:55:00
    Но... что с быстрым выключением питания... данные будут потеряны! L7 сохраняет последнее известное значение при каждом перезапуске. Но... планировщик создаст ГЛОБАЛЬНУЮ переменную, чтобы другие скрипты могли её использовать. Лучше, если мы останемся с локальными переменными и не будем использовать слишком много глобальных. Каждый скрипт может создавать локальную или глобальную переменную при запуске, нам не нужны переменные без последнего значения из предыдущего перезапуска. Но... на уровне скриптов мы не можем отредактировать переменную=значение в одной строке кода события планировщика! Мы не можем экспортировать это в файл из только одного планировщика, мы не можем редактировать это через `sed&awk` — не работает здесь… у нас нет подходящего обходного пути… Layer7 – лучший вариант. Зачем запускать планировщик для создания глобальных переменных, которые будут читать последнее значение из NAND? Это ещё хуже, чем L7. Конечно, мы можем придумать что-нибудь более безумное, например, создать новую bridge-variable1, задать значение в команде, но всё равно, L7 лучше. Предложение на будущее:
     
     
     
    msatter
    Guest
    #15
    0
    02.12.2020 10:08:00
    Можем ли мы перезапустить/выключить планировщик тогда?
     
     
     
    mrz
    Guest
    #16
    0
    02.12.2020 11:14:00
    Почему на свете RuterOS не сохраняет глобальные переменные после перезагрузки? Можете ли вы показать какой-нибудь другой язык скриптов или язык программирования, где определенные переменные волшебным образом восстанавливают свои значения из предыдущего экземпляра скрипта, не сохраняя данные в файл, реестр или базу данных? Если вы хотите сохранить что-то, обработайте это в своем коде. Но… что насчет внезапного отключения питания… данные будут потеряны! L7 запоминает только последнее значение при каждой перезагрузке. С L7 все как с конфигурацией планировщика: вам нужно записывать изменения. Если вы не запишете последние изменения в планировщик или даже в используемый вами L7, то, конечно, ничего не сохранится. Преимущество использования стартового планировщика в том, что вам не нужно читать и разбирать переменные, они просто загружаются автоматически при старте. Локальные переменные локальны области видимости, сохранять их не имеет смысла. Нет куда их восстанавливать, потому что область видимости не существует, когда скрипт завершен.
     
     
     
    msatter
    Guest
    #17
    0
    02.12.2020 12:28:00
    Это можно адаптировать для записи глобальных переменных в файл: http://forum.mikrotik.com/t/script-dont-create-file/143788/3 Я бы рекомендовал записывать только переменные, а не скрипты, из-за ограничения в 4096 байт. Если помечать функции словом `func` в названии, а переменные, которые не нужно сохранять, словом `nosafe`, например: `:foreach in environment do :if variablename ~ “(func|nosafe)” do{} else{безопасная запись в файл с использованием append} } Затем используйте планировщик при запуске, чтобы считывать переменные обратно в окружение с помощью `:global`.
     
     
     
    SiB
    Guest
    #18
    0
    02.12.2020 12:56:00
    С L7 всё то же самое, что и с настройками планировщика: чтобы изменения вступили в силу, их нужно записать. Если вы не сохраняете последние изменения в планировщике или даже в используемом вами L7, то, конечно, ничего не сохранится. Преимущество использования стартового планировщика в том, что вам не нужно читать и парсить переменные – они просто автоматически загружаются при старте. Я понимаю вас, что бы там ни хранилось, постоянная среда – это известная вещь, и мы можем использовать её, например, через `setx /M path "%path%;C:\your\path\here\"`. Способ планировщика должен делать `scheduler-env-startup` – он создаёт глобальную переменную со значением по умолчанию. `scheduler-run-own-finall-app` – это изменит нашу глобальную переменную. `scheduler-env-udpate` – каждые x времени он берет все глобальные переменные и заменяет данные в `scheduler-env-startup`. Лучший способ — хранить эту переменную в `/flash/env.txt` и загружать/обновлять их из планировщиков, потому что редактировать тело другого скрипта/планировщика без `sed&awk` в ROS — не самая простая задача. Тем не менее, Layer7 работает настолько идеально, и мы используем это, благодаря всего одной строке кода, мы можем остаться локальными, что значит, это почти идеально. В реальности… часто обходные пути живут дольше, чем решение.
     
     
     
    Jotne
    Guest
    #19
    0
    02.12.2020 13:05:00
    Это неважно. За время работы с MT Router многие из нас хотели бы иметь это. Да, есть несколько обходных путей: File/Script/L7 и т.д., но почему бы не реализовать это? Должно быть довольно просто. Посмотрите на пост Larsas выше. Рассматривайте это как формальный запрос на постоянные переменные.
     
     
     
    Larsa
    Guest
    #20
    0
    02.12.2020 13:27:00
    Переменные, сохраняющиеся автоматически, — это пустяк, если использовать, например, Javascript, TCL, Python, Powershell, Apple Automator и т.д. Но поскольку движок скриптов RoS — это какая-то урезанная копия TCL, которой не хватает рабочего механизма хранения данных, в ближайшее время, скорее всего, мы такой функциональностью не обзаведемся.
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры