четверг, 22 декабря 2016 г.

Проверка статуса выгрузки на FTP в Mikrotik.

  Очень часто мы пользуемся выгрузкой на FTP-сервера через скрипты в Mikrotik. Удобно загружать бекапы или экспортные файлы на сервер, передавать файлы типа anything.auto.rsc на другие Микротики для автовыполнения. Иногда передача по фтп завешается неудачей, наша цель - отследить статус отправки. Типового механизма отслеживания корректно ли произошла отправка по фтп в RouterOS нет, но есть небольшая уловка, которой мы можем воспользоваться.
  С помощью оператора :execute мы сможем выполнить скрипт и результат обработки записать в файл, проанализировав который можно сказать удачно ли произошла отправка или нет.
  Сам скрипт:
:local logftp "ftp.log"
: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"}
  192.168.88.254 - IP нашего сервера FTP,
  admin, admin - логин и пароль.
  Проанализировав вывод оператора и найдя в нем строчку "finished" - мы считаем что файл успешно передался.

стандартный вывод успешного завершения передачи по ftp.
  Это мы и записываем в переменную ftpSTS (done) и пишем в лог. Дальше используем эту переменную по вашему усмотрению.


Используемый материал:

Подписаться на новые статьи.

2 комментария:

  1. Спасибо тебе добрый человек. Долго искал как можно отловить в микротике состояние выполнения команд.

    ОтветитьУдалить
  2. Кстати работает такая конструкция
    :do {/tool fetch url="http://10.10.10.10:8080/info/certificate/RSA" keep-result=no; :global utm "good"} on-error={:global utm "bad"}

    ОтветитьУдалить