Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • 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
    скрипт отключения/включения Ethernet-интерфейса

    скрипт отключения/включения Ethernet-интерфейса

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    скрипт отключения/включения Ethernet-интерфейса, RouterOS
     
    ilpastore
    Guest
    #1
    0
    20.10.2015 20:37:00
    Привет! Хотелось бы узнать, есть ли скрипт, который проверяет, работает ли Ethernet-интерфейс на нужной скорости (например, 1 Гб). Если скорость неправильная (например, 100 Мб), скрипт должен попробовать отключить и включить этот интерфейс три раза. Если после трёх попыток проблема не решилась — отправить письмо на SO. Я приведу пример: 2 RB1100 подключены каждый к ether1, скорость LAN 1000 Мб. → СЕЙЧАС ВСЁ ОК. ПРОБЛЕМА (НЕ ВСЕГДА) — LAN показывает 100 Мб. РЕШЕНИЕ: я вручную отключаю и включаю интерфейс... (8 из 10 раз это исправляет проблему). ЛУЧШЕЕ РЕШЕНИЕ — скрипт, который проверяет, работает ли LAN на 1000 Мб, если 100 Мб — отключает и включает интерфейс три раза. Если не помогает, отправляет письмо. Это возможно?
     
     
     
    Genkun
    Guest
    #2
    0
    02.02.2016 09:03:00
    Отличный скрипт. Понятие, как работает массив, заняло у меня минут 40–60, но в итоге всё заработало без проблем.

    /system script  
    add name="Port Rate" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive comment="Проверка правильности синхронизации портов" source={  
     :local "ethernetSpeeds" {"ether2"="100Mbps"; "ether3"="1000mbps"}  
     
     :local cycleNumber 3  
     :local downtime 2  
     :local sleepBetween 5  
     :local sendEmail true  
     
     /interface ethernet {  
       :foreach ethName,targetSpeed in=$ethernetSpeeds do={  
         :local loopCounter 0  
         :local currentSpeed [get $ethName speed]
         
         :while (($currentSpeed != $targetSpeed) && ($loopCounter < $cycleNumber)) do={  
           set $ethName disabled=yes  
           :delay $downtime  
           set $ethName disabled=no  
           :set $loopCounter ($loopCounter + 1)  
           :delay $sleepBetween  
           :set currentSpeed [get $ethName speed]
         }  
     
         :if ($sendEmail && ($currentSpeed != $targetSpeed)) do={  
           /tool e-mail send to="someone@someone.com" from=someone@someone.com \  
             subject=([/system identity get name] . " *** $ethName at $currentSpeed, Target $targetSpeed") \
             server=1.2.3.4  
         }  
       }  
     }  
    }  
     
    /system scheduler  
    add name="Port Rate" start-time=startup on-event="Port Rate" interval=00:15:00 comment="Проверка правильности синхронизации портов"  

    Просто отредактируйте имена ether и скорости под вашу плату, и не забудьте про настройки e-mail.
     
     
     
    efaden
    Guest
    #3
    0
    03.02.2016 20:28:00
    Рад, что получилось. – Эрик
     
     
     
    evandromac
    Guest
    #4
    0
    01.09.2016 02:24:00
    Привет, Efaden! Твой скрипт — настоящий шедевр. Поздравляю. Но (и я понимаю, что это не ошибка в твоём скрипте), у меня в тестовой среде скорость чтения всегда показывает «100Mbps», независимо от того, стоит ли интерфейс на 10Mbps или 1Gbps. Ты не слышал ничего об этом? Похоже, это проблема с прошивкой RouterOS, потому что в твоей логике ошибок нет. У меня версия 6.36.2.
     
     
     
    efaden
    Guest
    #5
    0
    01.09.2016 23:29:00
    Интересно… Не видел ничего про это… введи /interface ethernet { :foreach i in=[find] do={:put [get $i speed]} } и скажи, что у тебя выйдет…
     
     
     
    evandromac
    Guest
    #6
    0
    02.09.2016 03:43:00
    Привет, Efaden! В RB951G- @2HnD (5 гигабитных портов, 4 по 1 Гбит/с, 1 по 100 Мбит/с) он показывает пять раз «100Mbps». На SXT SA с той же версией прошивки всегда показывает «100Mbps», даже если интерфейс работает на 10 Мбит/с или вообще отключён!
     
     
     
    efaden
    Guest
    #7
    0
    03.09.2016 12:25:00
    Хмм... ты можешь дать мне доступ к устройствам? Просто хочу посмотреть, какие данные можно получить с интерфейсов. Но это действительно странно. Напиши мне на efaden@gmail, и я попробую подобрать правильную команду для получения данных.
     
     
     
    evandromac
    Guest
    #8
    0
    06.09.2016 03:08:00
    Efaden: извини, что отвечаю только сегодня, но последние несколько дней мы работали над ceragon ссылкой, и я едва успевал посидеть за компьютером... По поводу скорости интерфейса — я немного покопался и нашёл решение, которое использует команду "/interface ethernet monitor". Я доработал твой скрипт, добавил кое-что своё, и вот результат:

    - Скрипт проверяет, совпадает ли скорость интерфейса с целевой скоростью для этого интерфейса.
    - Если да, скрипт заканчивается; если нет — записывает событие в лог и запускает процедуру сброса, логируя каждую попытку.
    - Если какая-либо попытка удалась — это записывается в лог, и попытки прекращаются.
    - Если все попытки неудачны — тоже записывается лог и отправляется письмо по электронной почте.

    Пожалуйста, посмотри мой код, если есть идеи, как улучшить (я не так хорош, как ты!), предлагай!

    PS: я бразилец, возможно, где-то забыл перевести переменные или функции с португальского на английский... код проверял, но уже поздно…

    :local "ethernetSpeeds" { "eth_uplink_HP"="100Mbps" ; "ether2"="1Gbps" }
    :local cycleNumber 3
    :local downtime 2
    :local sleepBetween 5
    :local trying false;

    # Определяем переменные для отправки почты
    :local mailServerName "PUT_YOUR_MAIL_SERVER_NAME_HERE";
    :local mailServerIp [:resolve $mailServerName];
    :local mailServerPort PUT_YOUR_MAIL_SERVER_PORT_HERE;
    :local mailFrom "PUT_MAIL_FROM_HERE";
    :local mailTo "PUT_MAIL_TO_HERE";
    :local mailSubject "WRITE_YOUR_MAIL_SUBJECT_HERE";
    :local mailUser "PUT_YOUR_MAIL_USER_HERE";
    :local mailPass "PUT_YOUR_MAIL_PASSWORD_HERE";
    :local mailBody "PUT_MAIL_BODY_HERE";

    # функция отправки почты
    :global sendMail do={
       /tool e-mail send server=$mailServerIp port=$mailServerPort from=$mailFrom to=$mailTo subject=$mailSubject body=$mailBody user=$mailUser password=$mailPass;
    }

    :foreach ethName,targetSpeed in=$ethernetSpeeds do={
       /interface ethernet {
           monitor $ethName once do { :set $currentSpeed $rate }
           :local loopCounter 0

           :if ($currentSpeed != $targetSpeed) do { :log info "Порт $ethName текущая скорость: $currentSpeed, цель = $targetSpeed: [ОШИБКА]" }

           :while (($currentSpeed != $targetSpeed) && ($loopCounter < $cycleNumber)) do={
               :if (!trying) do { :log info "Запускаем процедуру сброса интерфейса >>>" }

               set $ethName disabled=yes
               :delay $downtime
               set $ethName disabled=no
               :set $loopCounter ($loopCounter + 1)
               :delay $sleepBetween

               monitor $ethName once do { :set $currentSpeed $rate }
               :if ($currentSpeed = $targetSpeed) do { :log info "Целевая скорость интерфейса восстановлена." } else {
                   :log info "Попытка $loopCounter из $cycleNumber не удалась.";
                   :set $trying true;
                   :if ($loopCounter = $cycleNumber) do {
                       :log info "Пробуем отправить email-уведомление...";
                       $sendMail;
                   }
               }
           }
       }
    }
     
     
     
    efaden
    Guest
    #9
    0
    06.09.2016 16:25:00
    Отлично. Мне всё ещё интересно, почему одна команда, которую я использовал, всегда возвращает 100.
     
     
     
    evandromac
    Guest
    #10
    0
    06.09.2016 18:29:00
    Если хочешь разобраться глубже, да, могу дать тебе доступ к устройствам, которые выдают 100Мбит/с. Скажи, если хочешь, и я пришлю это тебе на почту.
     
     
     
    efaden
    Guest
    #11
    0
    06.09.2016 23:53:00
    Не так уж интересно... Главное, чтобы всё работало.
     
     
     
    HiltonT
    Guest
    #12
    0
    14.06.2018 03:41:00
    Из любопытства, на версии 6.42.3, когда я запускаю запрос скорости порта, у меня выходит то же самое — все интерфейсы показывают 100 Мбит/с, кроме sfp1 (CRS-125-24G-1S-2HnD), который работает на 1 Гбит/с. Причём все интерфейсы настроены на «Auto» с объявленными всеми скоростями. Ещё страннее, что если даже установить на некоторых портах «1Gbps Full» вместо Auto, в отчёте всё равно показывается скорость 100 Мбит/с на всех ethernet-портах.
     
     
     
    evandromac
    Guest
    #13
    0
    12.01.2019 19:24:00
    Ты пробовал моё решение?
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры