Jump to content
Калькуляторы

Остановить выполнение скрипта

Коллеги помогите поправить скрипт.

Есть скрипт который по событию в логе создает пользователя, генерирует код авторизации добавляет пользователя в user manager и отправляет код по смс.

При отправке смс на диске микротика создается файл в котором присутствует номер телефона. Задача максимум: перед добавлением пользователя в user manager посмотреть не отправлялось ли уже ему смс и если отправлялось меньше 5 минут назад, не делать не чего, если больше 5 минут продолжить выполнение скрипта. Задача минимум: не смотрим на время, просто смотрим факт отправки смс, если отправлено прекращаем дальнейшее выполнение скрипта, если нет, скрипт отрабатывает до конца.

пример имени файла: send?api_id=XXXXX-C772-D9F6-8EE9-XXXXXXXXXXX&to=79998887766&msg=Your+PASS:11375

Код скрипта:

#Search number in log hotspot
:foreach line in=[/log find buffer=hotspot message~"login failed"] do={
 :do {:local content [/log get $line message];
  :put $content;
  :local pos1 [:find $content " (" 0];
  :put $pos1;
  :if ($pos1 != " ") do={ 
   :local uname ""; 
   :local uname7 "";
   :local uname8 "";
   :local uname9 "";
   :local phone ""; 
:if ([:pick $content ($pos1-10)] = "9") do={ 
    :set uname [:pick $content ($pos1-10) ($pos1-0)];  
    :put $uname;
    :set uname7 [:put ("7" . {$uname})]
    :set uname8 [:put ("8" . {$uname})]
    :put $uname7
    :put $uname8
    #Password generation 
    :local date [/system clock get time]; 
    :local hour [:pick $date 0 2]; 
    :local min [:pick $date 3 5]; 
    :local sec [:pick $date 6 8]; 
    :local usernumber [:pick $content ($pos1-7) ($pos1-5)];
    :put $usernumber;
    :global pass 27394; 
    :set pass ($hour * $min * $sec - $usernumber); 
    :if ($pass = 0) do={ 
     :set pass 6524;
     }
    :put $pass;
    #Add user to hotspot / user-manager 
    do {/tool user-manager user add username=$uname password=$pass customer=admin copy-from=test disabled=no phone=$uname7;} on-error={};
    do {/tool user-manager user set password=$pass number=[find username=$uname]} on-error={};
   
    #sms
    do {/tool fetch url="https://xxx.xx/sms/send?api_id=XXXXX-C772-D9F6-8EE9-XXXXXXXXXXX&to=$uname7&msg=Your+PASS:$pass"} on-error={}; 
    }

Очень надеюсь на вашу помощь. 

Share this post


Link to post
Share on other sites

Код не смотрел. Что не работает? Если нужно остановить скрипт, можно через :error сделать, но тогда в лог будут сообщения сыпаться. Либо делаете булевый флаг и в контрольной точке его проверяете, если сработал флаг- ничего не делаете и скрипт просто кончится. По по поводу времени, можно считать от аптайма. Т.е. сохраняете аптайм, а потом просто разницу вычисляете. Ну либо через системные часы можно.

Share this post


Link to post
Share on other sites

я не большой спец в скриптах на микротике, но я бы попробовал создавать файлик (например 79998887766.flg), в него записывал время отправки. А при следующей итерации проверял наличие этого файла и его содержимое. 

https://forum.mikrotik.com/viewtopic.php?t=10278

:if ([:len [/file find name=someconfig.rsc]] > 0) do={
:put "FOUND IT"
}

и тут про чтение из файла 

https://forum.mikrotik.com/viewtopic.php?t=52113

Edited by EugeneTV

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this