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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.