Перейти к содержимому
Калькуляторы

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

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

Есть скрипт который по событию в логе создает пользователя, генерирует код авторизации добавляет пользователя в 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={}; 
    }

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

я не большой спец в скриптах на микротике, но я бы попробовал создавать файлик (например 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

Изменено пользователем EugeneTV

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.