Информация
Настройка
Новости
Контакты
Новинка
Распродажа
Оплата
Доставка
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • Changelogs
  • 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
     
    ditonet
    Guest
    #1
    0
    04.12.2011 21:19:00
    Привет! Один из моих клиентов пользуется ADSL с динамическим IP-адресом. Скрипт для обновления DynDNS запускается каждые 15 минут и работает нормально:

    # Задаём нужные переменные  
    :local username "user"  
    :local password "pass"  
    :local hostname "myhost.dyndns.info"  

    :global dyndnsForce  
    :global previousIP  

    # выводим отладочную информацию  
    # :log info ("dyndns-update: username = $username")  
    # :log info ("dyndns-update: password = $password")  
    :log info ("dyndns-update: hostname = $hostname")  
    :log info ("dyndns-update: previousIP = $previousIP")  

    # получаем текущий IP из интернета (если стоит двойной NAT)  
    /tool fetch mode=http address="checkip.dyndns.org" src-path="/" dst-path="/dyndns.checkip.html"  
    :local result [/file get dyndns.checkip.html contents]

    # парсим текущий IP из результата  
    :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]
    :log info "dyndns-update: currentIP = $currentIP"  

    # Проверяем, нужно ли обновлять DynDNS  
    # подробности запроса обновления здесь: http://www.dyndns.com/developers/specs/syntax.html  
    :if (($currentIP != $previousIP) || ($dyndnsForce = true)) do={  
       :set dyndnsForce false  
       :set previousIP $currentIP  
       /tool fetch user=$username password=$password mode=http address="members.dyndns.org" src-path="/nic/update?hostname=$hostname&myip=$currentIP" dst-path="/dyndns.txt"  
       :local result [/file get dyndns.txt contents]
       :log info ("dyndns-update: Обновление DynDNS требуется")  
       :log info ("dyndns-update: Результат обновления DynDNS: ".$result)  
    } else={  
       :log info ("dyndns-update: Обновление DynDNS не требуется")  
    }  

    Также настроен «netwatch» для быстрого обновления DNS после переподключения ADSL:

    /tool netwatch  
    add disabled=no down-script="led user-led=no\r\n:log info \"Host 208.67.220.220 недоступен\"\r\n" host=208.67.222.222 interval=1m timeout=1s up-script="led user-led=yes\r\n/system script run dyndns-update\r\n:log info \"Host 208.67.220.220 доступен\"\r\n\r"  

    Проблема в том, что когда скрипт ‘dyndns-update’ вызывается из ‘netwatch’, глобальная переменная ‘previousIP’ почему-то пустая, хотя должна содержать строку с IP-адресом. Ниже лог:  

    21:45:00 script,info dyndns-update: hostname = myhost.dyndns.info  
    21:45:00 script,info dyndns-update: previousIP = 183.26.221.45  
    21:45:01 info fetch: file "dyndns.checkip.html" создан  
    21:45:01 script,info dyndns-update: currentIP = 183.26.221.45  
    21:45:01 script,info dyndns-update: Обновление DynDNS не требуется  
    21:54:11 system,info netwatch хост изменён администратором  
    21:54:11 script,info dyndns-update: hostname = myhost.dyndns.info  
    21:54:11 script,info dyndns-update: previousIP =  
    21:54:11 info fetch: файл "dyndns.checkip.html" создан  
    21:54:12 script,info dyndns-update: currentIP = 183.26.221.45  
    21:54:13 info fetch: файл "dyndns.txt" создан  
    21:54:13 script,info dyndns-update: Обновление DynDNS требуется  
    21:54:13 script,info dyndns-update: Результат обновления DynDNS: nochg 183.26.221.45  
    21:54:13 script,info Host 208.67.220.220 доступен  
    RB750, ROS 5.8  

    Кто-нибудь сталкивался с похожей проблемой с глобальными переменными? Или я что-то делаю не так? Заранее спасибо!
     
     
     
    Antz
    Guest
    #2
    0
    13.08.2012 12:42:00
    Кто-нибудь может подтвердить, что эта проблема решена? У меня такая же проблема на ROS v5.16. Я также пытался настроить Netwatch так, чтобы он вызывал скрипт, который обновляет глобальную переменную, но это не сработало (ошибок нет, но и обновления тоже нет).
     
     
     
    mrz
    Guest
    #3
    0
    13.08.2012 12:50:00
    Проблема пока не решена. Я бы предложил временное решение — записывать данные в файл или вместо netwatch использовать запланированный скрипт пинга, который делает то же самое, но запускается от правильного пользователя.
     
     
     
    Antz
    Guest
    #4
    0
    13.08.2012 13:03:00
    Спасибо за быстрый ответ, mrz. Я перейду на использование скрипта расписания вместо Netwatch, как вы и советуете. Однако это делает инструмент Netwatch бесполезным вообще для запуска скриптов, которые зависят от результатов других скриптов. Есть ли какая-то информация, в какой версии ROS это будет исправлено?
     
     
     
    mrz
    Guest
    #5
    0
    13.08.2012 13:07:00
    Зависит от приоритетов. Скорее всего, в версии 6.
     
     
     
    thantoldo
    Guest
    #6
    0
    16.05.2013 11:31:00
    Та же проблема с netwatch возникает, когда к глобальным переменным обращаются через hotspot userprofile в скриптах onlogin и onlogout (как в самих скриптах, так и во внешних). Проверял на версиях 5 и 6. Есть какие-нибудь новости?
     
     
     
    jarda
    Guest
    #7
    0
    25.09.2014 16:19:00
    Привет, кажется, эта ошибка всё ещё сохраняется даже в версии 6.18. Да, я знаю, что сейчас актуальна 6.19… В любом случае, где в списке задач находится решение по обмену «глобальными» переменными между скриптами и netwatches? Будут ли вообще настоящие глобальные переменные, которые можно будет использовать без каких-либо ограничений?
     
     
     
    otgooneo
    Guest
    #8
    0
    07.06.2017 04:52:00
    Эта проблема всё ещё существует в версии v6.38.5.
     
     
     
    jarda
    Guest
    #9
    0
    07.06.2017 05:52:00
    Ты пробовал запускать все скрипты под одним пользователем и с соответствующими правами?
     
     
     
    otgooneo
    Guest
    #10
    0
    19.06.2017 14:56:00
    Да. Пробовал несколькими способами, используя полного администратора как в скриптах, так и в планировщике. Результат одинаковый — не получилось. Вместо глобальной переменной я использую DNS-запись. Как-то работает.
     
     
     
    crsenrico
    Guest
    #11
    0
    23.06.2017 07:25:00
    Просто заново объяви переменную без инициализации. script1: :global previousIP "1.2.3.4" :put $previousIP выведет 1.2.3.4 script2: :global previousIP :put $previousIP тоже выведет 1.2.3.4
     
     
     
    rushlife
    Guest
    #12
    0
    31.08.2017 06:01:00
    Привет, ребята! У меня тоже проблема с глобальными переменными. У меня уже есть два скрипта: один читает «маршруты по умолчанию» (которые даёт DHCP-сервер), и эти IP-адреса сохраняются как глобальные переменные — по одной для каждого WAN-интерфейса (у меня их два). Но когда я запускаю другой скрипт, который должен использовать эти переменные (IP-адреса) для редактирования существующих маршрутов, эти глобальные переменные (они сохранены и видны в /system script environment) как будто недоступны. Скрипт их просто «не видит». Есть какое-то решение? Я использую «stable» 6.38.5, rb2011. Сейчас я решаю проблему с глобальными переменными с помощью «всё-в-одном» скриптов, где всё необходимое находится в одном месте, и тогда я могу без проблем обращаться и к глобальным, и к локальным переменным. Спасибо, ребята!
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2025 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры