Скрипт для копирования конфигов на FTP отрабатывает, но файлы на FTP-сервере оказываются нулевой длины. FTP-сервер сообщает, что ему ноль байт и передавали. При этом на Микротике сохраненный файл нормальный. Увеличение Delay до 30 секунд не помогло. Пробовал разные FTP-сервера, проблема не в сервере. :local myname "RouterName" :local fname ($myname."); :local bname ($myname".backup"); :local ename ($myname".rsc"); :local ftpaddr "10.1.1.1"; :local ftpuser "Mikrotik"; :local ftppass "MyPassword@"; /system backup save name=$myname password=MyPassword@; :delay 10; /export file=$myname :delay 10; /tool fetch address=$ftpaddr src-path=$myname user=$ftpuser password=$ftppass port=21 upload=yes mode=ftp dst-path=$bname :delay 15; /tool fetch address=$ftpaddr src-path=$myname user=$ftpuser password=$ftppass port=21 upload=yes mode=ftp dst-path=$ename :delay 15;
Да, если вручную команды выполнить в командной строке - все заливает как надо --------------------- Лог FTP-сервера при заливке файла нулевой длины из скрипта: [5] Mon 10Feb20 19:15:12 - (001507) Connected to *********** (Local address 192.168.0.11) [6] Mon 10Feb20 19:15:12 - (001507) 220 FTP Server ready... [2] Mon 10Feb20 19:15:12 - (001507) USER Mikrotik [6] Mon 10Feb20 19:15:12 - (001507) 331 User name okay, need password. [2] Mon 10Feb20 19:15:12 - (001507) PASS xxxxx [5] Mon 10Feb20 19:15:12 - (001507) User MIKROTIK logged in [6] Mon 10Feb20 19:15:12 - (001507) 230 User logged in, proceed. [2] Mon 10Feb20 19:15:12 - (001507) TYPE I [6] Mon 10Feb20 19:15:12 - (001507) 200 Type set to I. [2] Mon 10Feb20 19:15:12 - (001507) PASV [6] Mon 10Feb20 19:15:12 - (001507) 227 Entering Passive Mode (*,*,*,*,160,55) [2] Mon 10Feb20 19:15:12 - (001507) STOR Router.rsc [4] Mon 10Feb20 19:15:12 - (001507) Receiving file e:\backup\server\clients-internet-backup\mikrotik\Router.rsc [6] Mon 10Feb20 19:15:12 - (001507) 150 Opening BINARY mode data connection for Router.rsc. [4] Mon 10Feb20 19:15:12 - (001507) Received file e:\backup\server\clients-internet-backup\mikrotik\Router.rsc successfully (0 Bytes/sec - 0 Bytes) [6] Mon 10Feb20 19:15:12 - (001507) 226 Transfer complete. [5] Mon 10Feb20 19:15:13 - (001507) Closing connection for user MIKROTIK (00:00:01 connected)
Права "FULL" юзера, который Owner, а Policy ниже. Установка всех галок ситуации не меняет. Микротики пробовал разные.
У меня есть подозрения, что в режиме скриптов как-то криво отрабатывается PassiveMode, но вроде бы нет параметра, заставляющего использовать FTP в ActiveMode...
Добил я решение проблемы. В Микротике нет проблем, суть была в том, что Микротик не умеет использовать активный режим FTP (только порт 21) и работает всегда в пассивном. Оказалось, что второй и третий FTP, которые я использовал в качестве тестовых, не поддерживали Passive-Mode, а на моём был проброшен не весь диапазон портов, которые используются в Passive Mode (я на сервере его увеличил, а на роутере в NAT и Filter не изменил). Итак, если кому интересно - вот скрипт для автоматической архивации конфига роутера на FTP. Очень полезно для систем, где конфиг меняется постоянно (новые VPN, правила Firewall, NAT и пр.) Скрипт формирует два файла, состоящих из имени девайса и текущей даты (один - стандартный backup, второй - текстовый конфиг) и заливает на указанный FTP раз в день (на FTP-сервере написана процедура ротации файлов, удаляющая те, которые старше 30 дней). После этого скрипт удаляет из роутера созданные файлы, чтобы не забивать диск (и вот тут хотелось бы добавить в скрипт команды, которые будут делать ротацию, удаляя только файлы, которые старше ** дней. Кто поможет?) Код: /system scheduler add interval=1d start-date=may/03/2020 start-time=06:00:00 name=FTP-Autobackup-Daily on-event="/system script run FTP-Autobackup" policy=ftp,read,write,policy,test,password,sniff,sensitive,romon /system script add dont-require-permissions=no name=FTP-Autobackup owner=admin policy=\ ftp,read,write,policy,test,password,sniff,sensitive,romon source=":\ local tmpdate [/system clock get date];\ \n:local months (\"jan\",\"feb\",\"mar\",\"apr\",\"may\",\"jun\",\"jul\",\ \"aug\",\"sep\",\"oct\",\"nov\",\"dec\");\ \n:local month [ :pick \$tmpdate 0 3 ];\ \n:local mm ([ :find \$months \$month -1 ] + 1);\ \n:if (\$mm < 10) do={ :set mm (\"0\" . \$mm); }\ \n:local date ([:pick \$tmpdate 4 6] .\"-\" . \$mm .\"-\" . [:pick \$tmpda\ te 7 11])\ \n\ \n:local myname [/system identity get name];\ \n:local fname (\$myname.\"_\".\$date);\ \n:local bname (\$myname.\"_\".\$date.\".backup\");\ \n:local ename (\$myname.\"_\".\$date.\".rsc\");\ \n:local ftpaddr \"10.1.1.1\";\ \n:local ftpuser \"Mikrotik\";\ \n:local ftppass \"************\";\ \n\ \n/system backup save name=\$fname password=********;\ \n:delay 10;\ \n/export file=\$ename\ \n:delay 10;\ \n\ \n/tool fetch address=\$ftpaddr src-path=\$name user=\$ftpuser password=\$\ ftppass port=21 upload=yes mode=ftp dst-path=\$bname\ \n:delay 15;\ \n/tool fetch address=\$ftpaddr src-path=\$ename user=\$ftpuser password=\ \$ftppass port=21 upload=yes mode=ftp dst-path=\$ename\ \n:delay 15;\ \n\ \n/file remove \$bname;\ \n/file remove \$ename;\ \n"