Очень часто мы пользуемся выгрузкой на FTP-сервера через скрипты в Mikrotik. Удобно загружать бекапы или экспортные файлы на сервер, передавать файлы типа anything.auto.rsc на другие Микротики для автовыполнения. Иногда передача по фтп завешается неудачей, наша цель - отследить статус отправки. Типового механизма отслеживания корректно ли произошла отправка по фтп в RouterOS нет, но есть небольшая уловка, которой мы можем воспользоваться.
С помощью оператора :execute мы сможем выполнить скрипт и результат обработки записать в файл, проанализировав который можно сказать удачно ли произошла отправка или нет.
Сам скрипт:
admin, admin - логин и пароль.
Проанализировав вывод оператора и найдя в нем строчку "finished" - мы считаем что файл успешно передался.
Это мы и записываем в переменную ftpSTS (done) и пишем в лог. Дальше используем эту переменную по вашему усмотрению.
С помощью оператора :execute мы сможем выполнить скрипт и результат обработки записать в файл, проанализировав который можно сказать удачно ли произошла отправка или нет.
Сам скрипт:
:local logftp "ftp.log"192.168.88.254 - IP нашего сервера FTP,
:local cmd "/tool fetch mode=ftp upload=yes user=\"admin\" password=\"admin\" src-path=\"11.txt\" address=\"192.168.88.254\" dst-path=\"99.txt\""
:execute file=$logftp script=$cmd
# ждем 30 секунд. Это время можно изменить проанализировав время выгрузки вашего файла
:delay 30s
:local logres [/file get [find name="$logftp.txt"] contents]
:if ($logres~"finished") do={
:global ftpSTS "done"
/log warning "ftp upload success"
} else={:global ftpSTS "error"; /log error "ftp upload NOT success"}
admin, admin - логин и пароль.
Проанализировав вывод оператора и найдя в нем строчку "finished" - мы считаем что файл успешно передался.
стандартный вывод успешного завершения передачи по ftp. |
Спасибо тебе добрый человек. Долго искал как можно отловить в микротике состояние выполнения команд.
ОтветитьУдалитьКстати работает такая конструкция
ОтветитьУдалить:do {/tool fetch url="http://10.10.10.10:8080/info/certificate/RSA" keep-result=no; :global utm "good"} on-error={:global utm "bad"}