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

    Удалять пользователей через определённое количество дней — перестаёт работать после обновления до версии v.6.33rc11.

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Удалять пользователей через определённое количество дней — перестаёт работать после обновления до версии v.6.33rc11., RouterOS
     
    PeterDoBrasil
    Guest
    #1
    0
    20.09.2015 02:33:00
    Эта часть работает нормально { :local date [ /system clock get date ] :if ( [ /ip hotspot user get $user comment ] = “” ) do={ [ /ip hotspot user set $user comment=$date ] } }

    Проблемная часть начинается здесь { :local offset 7 :global today { :local date [ /system clock get date ] :local montharray ( “jan”,“feb”,“mar”,“apr”,“may”,“jun”,“jul”,“aug”,“sep”,“oct”,“nov”,“dec” ) :local monthdays ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ) :local days [ :pick $date 4 6 ] :local monthtxt [ :pick $date 0 3 ] :local year [ :pick $date 7 11 ] :local months ([ :find $montharray $monthtxt] ) :for nodays from=0 to=$months do={ :set days ( $days + [ :pick $monthdays $nodays ] ) } :set days ($days + $year * 365) :set today $days }

    :foreach i in [ /ip hotspot user find where disabled=no ] do={ :if ([ :find [ /ip hotspot user get $i comment ] ] = 0 ) do={ :local date [ /ip hotspot user get $i comment ] :local montharray ( “jan”,“feb”,“mar”,“apr”,“may”,“jun”,“jul”,“aug”,“sep”,“oct”,“nov”,“dec” ) :local monthdays ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ) :local days [ :pick $date 4 6 ] :local monthtxt [ :pick $date 0 3 ] :local year [ :pick $date 7 11 ] :local months ( [ :find $montharray $monthtxt ] ) :for nodays from=0 to=$months do={ :set days ( $days + [ :pick $monthdays $nodays ] ) } :set days ($days + $year * 365) :if ( ($days + $offset) < $today ) do={ :local name [/ip hotspot user get $i name] :log info “HOTSPOT EXPIRE SCRIPT: Отключаем Hotspot пользователя $name, первый вход $date” [ /ip hotspot user disable $i ] [ /ip hotspot active remove [find where user=$user] ] } } } }

    Новое сообщение об ошибке в терминале: invalid value of “to”, must be integer

    NORMIS, ПОЖАЛУЙСТА, ПОМОГИТЕ СДЕЛАТЬ СКРИПТ, ЧТОБЫ ОН СНОВА РАБОТАЛ КАК НАДО!!!
     
     
     
    PeterDoBrasil
    Guest
    #2
    0
    19.10.2015 13:18:00
    Появилась новая ошибка! Это очень странно!

    {
     :local offset 2
     :global today {
       :local date [ /system clock get date ]
       :local montharray ( “jan”,“feb”,“mar”,“apr”,“may”,“jun”,“jul”,“aug”,“sep”,“oct”,“nov”,“dec” )
       :local monthdays ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 )
       :local days [ :pick $date 4 6 ]
       :local monthtxt [ :pick $date 0 3 ]
       :local year [ :pick $date 7 11 ]
       :local months ([ :find $montharray $monthtxt] )
       :for nodays from=0 to=[:tonum $months] do={
         :set days ( $days + [ :pick $monthdays $nodays ] )
       }
       :set days ($days + $year * 365)
       :set today $days
     }

     :foreach i in [ /ip hotspot user find where profile=PRIVATE ] do={
       :if ([ :find [ /ip hotspot user get $i comment ] ] = 0 ) do={
         :local date [ /ip hotspot user get $i comment ]
         :local montharray ( “jan”,“feb”,“mar”,“apr”,“may”,“jun”,“jul”,“aug”,“sep”,“oct”,“nov”,“dec” )
         :local monthdays ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 )
         :local days [ :pick $date 4 6 ]
         :local monthtxt [ :pick $date 0 3 ]
         :local year [ :pick $date 7 11 ]
         :local months ( [ :find $montharray $monthtxt ] )
         :for nodays from=0 to=[:tonum $months] do={
           :set days ( $days + [ :pick $monthdays $nodays ] )
         }
         :set days ($days + $year * 365)
         :if ( ($days + $offset) < $today ) do={
           :local name [/ip hotspot user get $i name]
           :log info “HOTSPOT EXPIRE SCRIPT: Отключаю пользователя Hotspot $name, впервые вошедшего в $date”
           [ /ip hotspot user disable $i ]
         }
       }
     }
    }

    По профилю=PRIVATE выдает ошибку NewTerminal: неверное значение “to”, должно быть целым числом.

    {
     :local offset 2
     :global today {
       :local date [ /system clock get date ]
       :local montharray ( “jan”,“feb”,“mar”,“apr”,“may”,“jun”,“jul”,“aug”,“sep”,“oct”,“nov”,“dec” )
       :local monthdays ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 )
       :local days [ :pick $date 4 6 ]
       :local monthtxt [ :pick $date 0 3 ]
       :local year [ :pick $date 7 11 ]
       :local months ([ :find $montharray $monthtxt] )
       :for nodays from=0 to=[:tonum $months] do={
         :set days ( $days + [ :pick $monthdays $nodays ] )
       }
       :set days ($days + $year * 365)
       :set today $days
     }

     :foreach i in [ /ip hotspot user find where profile=10RS ] do={
       :if ([ :find [ /ip hotspot user get $i comment ] ] = 0 ) do={
         :local date [ /ip hotspot user get $i comment ]
         :local montharray ( “jan”,“feb”,“mar”,“apr”,“may”,“jun”,“jul”,“aug”,“sep”,“oct”,“nov”,“dec” )
         :local monthdays ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 )
         :local days [ :pick $date 4 6 ]
         :local monthtxt [ :pick $date 0 3 ]
         :local year [ :pick $date 7 11 ]
         :local months ( [ :find $montharray $monthtxt ] )
         :for nodays from=0 to=[:tonum $months] do={
           :set days ( $days + [ :pick $monthdays $nodays ] )
         }
         :set days ($days + $year * 365)
         :if ( ($days + $offset) < $today ) do={
           :local name [/ip hotspot user get $i name]
           :log info “HOTSPOT EXPIRE SCRIPT: Отключаю пользователя Hotspot $name, впервые вошедшего в $date”
           [ /ip hotspot user disable $i ]
         }
       }
     }
    }

    А по профилю=10RS ошибки нет, NewTerminal работает нормально. Почему так???
     
     
     
    JJCinAZ
    Guest
    #3
    0
    19.10.2015 14:21:00
    Тебе стоит попробовать вставить несколько команд «:log info ()» для отладки кода. Например...

    :foreach i in [ /ip hotspot user find where profile=PRIVATE ] do={
    :if ([ :find [ /ip hotspot user get $i comment ] ] = 0 ) do={
    :local date [ /ip hotspot user get $i comment ]
    :local montharray ( "jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec" )
    :local monthdays ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 )
    :local days [ :pick $date 4 6 ]
    :log info ($days)
    :local monthtxt [ :pick $date 0 3 ]
    :log info ($monthtxt)
    :local year [ :pick $date 7 11 ]
    :log info ($year)
    :local months ( [ :find $montharray $monthtxt ] )
    :log info ($months)
    :for nodays from=0 to=[:tonum $months] do={
    :set days ( $days + [ :pick $monthdays $nodays ] )
    }

    ...
     
     
     
    PeterDoBrasil
    Guest
    #4
    0
    19.10.2015 14:36:00
    Результат — информация о скрипте, информация о скрипте HP. Что я не понимаю, так это то, что когда я меняю профиль пользователя, скрипт работает отлично, а когда я снова переключаю профиль на свой кастомный, ошибка возвращается.
     
     
     
    PeterDoBrasil
    Guest
    #5
    0
    19.10.2015 15:00:00
    { :local offset 1 :global today { :local date [ /system clock get date ] :local montharray ( "jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec" ) :local monthdays ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ) :local days [ :pick $date 4 6 ] :local monthtxt [ :pick $date 0 3 ] :local year [ :pick $date 7 11 ] :local months ( [ :find $montharray $monthtxt ] ) :for nodays from=0 to=[:tonum $months] do={ :set days ( $days + [ :pick $monthdays $nodays ] ) } :set days ($days + $year * 365) :set today $days } :foreach i in [ /ip hotspot user find where profile=1000 ] do={ :if ([ :find [ /ip hotspot user get $i comment ] ] = 0 ) do={ :local date [ /ip hotspot user get $i comment ] :local montharray ( "jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec" ) :local monthdays ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ) :local days [ :pick $date 4 6 ] :log info ($days) :local monthtxt [ :pick $date 0 3 ] :log info ($monthtxt) :local year [ :pick $date 7 11 ] :log info ($year) :local months ( [ :find $montharray $monthtxt ] ) :log info ($months) :for nodays from=0 to=[:tonum $months] do={ :set days ( $days + [ :pick $monthdays $nodays ] ) } :set days ($days + $year * 365) :if ( ($days + $offset) < $today ) do={ :local name [/ip hotspot user get $i name] :local mac [/ip hotspot user get $i mac-address] :local mail [/ip hotspot user get $i email] :local time [/system clock get time] :local cdate [/system clock get date] :log info "HOTSPOT EXPIRE SCRIPT: Отправка email пользователю Hotspot $name, который первый раз входил $date" [ /tool e-mail send to="$mail" from="5g.net" subject=("Aviso 5G Net" . " – " . "Usuário=$name" . " – " . "Seu Mac=$mac") body= "ВНИМАНИЕ, ВАША ПОДПИСКА СКОРО ИСТЕКАЕТ!!! Ваша подписка истекает в ближайшие 24 часа, немедленно используйте все оставшиеся гигабайты или мегабайты!!! Ваша текущая подписка была активирована $date!!! Имя пользователя=$name, Mac вашего устройства=$mac Это сообщение отправлено $cdate, время - $time. Большое спасибо от ваших друзей из 5G Net в Нуово Прогрессо, PA, CEP 68193-000, Бразилия" ] } } } }

    invalid value of “to”, must be integer

    script info th

    script info HP

    script info r

    script info

    # \

    now I change the profile=270RS in hotspot user

    { :local offset 1 :global today { :local date [ /system clock get date ] :local montharray ( "jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec" ) :local monthdays ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ) :local days [ :pick $date 4 6 ] :local monthtxt [ :pick $date 0 3 ] :local year [ :pick $date 7 11 ] :local months ( [ :find $montharray $monthtxt ] ) :for nodays from=0 to=[:tonum $months] do={ :set days ( $days + [ :pick $monthdays $nodays ] ) } :set days ($days + $year * 365) :set today $days } :foreach i in [ /ip hotspot user find where profile=270RS ] do={ :if ([ :find [ /ip hotspot user get $i comment ] ] = 0 ) do={ :local date [ /ip hotspot user get $i comment ] :local montharray ( "jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec" ) :local monthdays ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ) :local days [ :pick $date 4 6 ] :log info ($days) :local monthtxt [ :pick $date 0 3 ] :log info ($monthtxt) :local year [ :pick $date 7 11 ] :log info ($year) :local months ( [ :find $montharray $monthtxt ] ) :log info ($months) :for nodays from=0 to=[:tonum $months] do={ :set days ( $days + [ :pick $monthdays $nodays ] ) } :set days ($days + $year * 365) :if ( ($days + $offset) < $today ) do={ :local name [/ip hotspot user get $i name] :local mac [/ip hotspot user get $i mac-address] :local mail [/ip hotspot user get $i email] :local time [/system clock get time] :local cdate [/system clock get date] :log info "HOTSPOT EXPIRE SCRIPT: Отправка email пользователю Hotspot $name, который первый раз входил $date" [ /tool e-mail send to="$mail" from="5g.net" subject=("Aviso 5G Net" . " – " . "Usuário=$name" . " – " . "Seu Mac=$mac") body= "ВНИМАНИЕ, ВАША ПОДПИСКА СКОРО ИСТЕКАЕТ!!! Ваша подписка истекает в ближайшие 24 часа, немедленно используйте все оставшиеся гигабайты или мегабайты!!! Ваша текущая подписка была активирована $date!!! Имя пользователя=$name, Mac вашего устройства=$mac Это сообщение отправлено $cdate, время - $time. Большое спасибо от ваших друзей из 5G Net в Нуово Прогрессо, PA, CEP 68193-000, Бразилия" ] } } } }

    email send O.K, New Terminal no error, script info 10 script info oct script info 2015 script info 9

    Мой почтовый клиент Thunderbird получил сообщение:

    ВНИМАНИЕ, ВАША ПОДПИСКА СКОРО ИСТЕКАЕТ!!! Ваша подписка истекает в ближайшие 24 часа, немедленно используйте все оставшиеся гигабайты или мегабайты!!! Ваша текущая подписка была активирована 10 окт 2015!!! Имя пользователя=Sa, Mac вашего устройства=94:51:03:D3:B6:B8 Это сообщение отправлено 19 окт 2015, время - 12:55:04. Большое спасибо от ваших друзей из 5G Net в Нуово Прогрессо, PA, CEP 68193-000, Бразилия.
     
     
     
    JJCinAZ
    Guest
    #6
    0
    19.10.2015 15:16:00
    Итак, переменная $days неправильная, и это связано с переменной $date, которая берётся из комментария пользователя Hotspot: :local date [ /ip hotspot user get $i comment ]. Очевидно, что у одного из ваших пользователей Hotspot комментарий не соответствует ожидаемому формату.
     
     
     
    PeterDoBrasil
    Guest
    #7
    0
    19.10.2015 18:34:00
    10 октября 2015 года
     
     
     
    PeterDoBrasil
    Guest
    #8
    0
    19.10.2015 18:40:00
    Я не понимаю, почему этот скрипт отлично работает для всех профилей пользователей, а ошибка возникает только в одном конкретном профиле. Я ничего не менял в правилах, ошибка появляется, когда я меняю профиль в пользовательском профиле???
     
     
     
    JJCinAZ
    Guest
    #9
    0
    19.10.2015 18:41:00
    Попробуй каждый раз в цикле выводить значение переменной date.
     
     
     
    PeterDoBrasil
    Guest
    #10
    0
    23.10.2015 11:56:00
    Я не понимаю, что ты имеешь в виду???
     
     
     
    JJCinAZ
    Guest
    #11
    0
    23.10.2015 22:16:00
    Сразу после вашей строки: :local date [ /ip hotspot user get $i comment ] добавьте лог: :local date [ /ip hotspot user get $i comment ] :log info "DATE IS:$date" Вы увидите в комментарии что-то, чего не ожидали.
     
     
     
    PeterDoBrasil
    Guest
    #12
    0
    24.10.2015 09:40:00
    :foreach i in [ /ip hotspot user find where profile=1000 ] do={ :if ([ :find [ /ip hotspot user get $i comment ] ] = 0 ) do={ :local date [ /ip hotspot user get $i comment ]
     
     
     
    diodo
    Guest
    #13
    0
    11.05.2016 19:24:00
    Дорогой PeterDoBrasil, ты решил свою проблему? Я пытаюсь сделать скрипт, похожий на твой.
     
     
     
    PeterDoBrasil
    Guest
    #14
    0
    21.05.2016 21:14:00
    High Voltage повредил мой роутер, у меня больше нет другого устройства, чтобы сейчас работать со скриптами!!!
     
     
     
    diodo
    Guest
    #15
    0
    21.05.2016 23:16:00
    Дорогой @PeterDoBrasil, твой скрипт очень пригодился мне. Спасибо, что поделился им на mikrotik WIKI. Я разрабатываю группу скриптов, которые должны создавать статического пользователя с данными динамического "trial hotspot user" и при каждом выходе обновлять у него переменную "uptime" (я использую поле limit-uptime). Каждый день запускаю твой скрипт (с небольшими доработками), чтобы узнать, провёл ли пользователь больше 7 часов за последние 7 дней. МОЯ ПРОБЛЕМА: на странице http://wiki.mikrotik.com/wiki/Manual:IP/Hotspot/User написано: «Начиная с версии v6.34rc11 доступны дополнительные переменные», где указана новая переменная "$uptime-secs", но при использовании v6.35.2 или v6.34.1 этой переменной нет. Может быть, ты или гуру @JJCinAZ сможете помочь. Извиняюсь за мой плохой английский. Мой родной язык — португальский. Если можно, напишите мне в скайпе: osorio@diodo.com.br Спасибо всем.
     
     
     
    Sinan
    Guest
    #16
    0
    22.05.2016 12:17:00
    В этом скрипте куча ошибок!!
     
     
     
    eldoncito2019
    Guest
    #17
    0
    04.06.2022 13:53:00
    Ребята, я нашёл этот скрипт и надеюсь, кому-то он пригодится:

    :local mdays  {31;28;31;30;31;30;31;31;30;31;30;31}  
    :local months {"jan"=1;"feb"=2;"mar"=3;"apr"=4;"may"=5;"jun"=6;"jul"=7;"aug"=8;"sep"=9;"oct"=10;"nov"=11;"dec"=12}  
    :local monthr  {"jan";"feb";"mar";"apr";"may";"jun";"jul";"aug";"sep";"oct";"nov";"dec"}  

    :local dd  [:tonum [:pick $date 4 6]]
    :local yy [:tonum [:pick $date 7 11]]
    :local month [:pick $date 0 3]

    :local mm (:$months->$month)  
    :set dd ($dd+$days)  

    :local dm [:pick $mdays ($mm-1)]
    :if ($mm=2 && (($yy&3=0 && ($yy/100*100 != $yy)) || $yy/400*400=$yy) ) do={ :set dm 29 }  

    :while ($dd>$dm) do={  
       :set dd ($dd-$dm)  
       :set mm ($mm+1)  
       :if ($mm>12) do={  
           :set mm 1  
           :set yy ($yy+1)  
       }  
       :set dm [:pick $mdays ($mm-1)]
       :if ($mm=2 &&  (($yy&3=0 && ($yy/100*100 != $yy)) || $yy/400*400=$yy) ) do={ :set dm 29 }  
    }  
    :local res "$[:pick $monthr ($mm-1)]/"
    if ($dd<10) do={ :set res ($res."0") }  
    :set $res "$res$dd/$yy"  
    :return $res  

    :local date ([system clock get date]." ".[system clock get time])
    :if ([ip hotspot user get $user value-name=comment]="") do={
       ip hotspot user set $user comment=$date  
    }  
    :local validDays 30  

    :local getNextTime [:parse [/system script get nextDateByCaibneTik source]]
    foreach usr in=[ip hotspot user find] do={
       if (([len [ip hotspot user get $usr comment]]=20) && ([:find [ip hotspot user get $usr comment] " " -1]=11)) do={
           :local getComment [ip hotspot user get $usr comment]; :local date [:pick $getComment 0 11]; :local time [:pick $getComment 12 20]
           if ([$getNextTime date=$date days=$validDays]=[system clock get date]) do={
               :local nowTime [system clock get time]
               :local nowMS (([pick $nowTime 0 2]*60*60*1000)+([pick $nowTime 3 5]*60*1000)+([pick $nowTime 6 8]*1000))
               :local ms (([pick $time 0 2]*60*60*1000)+([pick $time 3 5]*60*1000)+([pick $time 6 8]*1000))
               if ([$nowMS]>=$ms) do={
                   :local username [ip hotspot user get $usr name]
                   ip hotspot active remove [find user=$username]
                   ip hotspot user remove $usr  
               }  
           }  
       }  
    }  
    EL DONCITO.
     
     
     
    rextended
    Guest
    #18
    0
    04.06.2022 14:11:00
    Код, брошенный туда кое-как, без инструкций и неполный, никому не помогает. Это просто мусор. Например, где скрипт «nextDateByCaibneTik»?
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры