синхронизация ftp synology

Был неприятно удивлен тем, что в новой DSM 7 нет больше возможности подключать удаленные папки по протоколу FTP. Ну, это нас никогда не останавливало, накатаем скрипт синхронизации папок по расписанию.

Вы скажете «стоп» — это совершенно разные вещи, а я отвечу, наши подрядчики придумали синхронизацию по расписанию. И попросили нам это реализовать у себя.

Их вариант подразумевал использование WinSCP https://winscp.net/. Мы же используем клиент lftp, который есть на борту Synology.

создаём sh файл

#!/bin/bash

USER="user_login"
HOST="ftp_server_address"
PORT="ftp_server_port"
LCD="/volume1/полный/путь/к/папке/с/проектом"	# путь к папке на нашем локальном сервере
RCD="путь/к/удаленной/папке"	# путь к папке на ftp сервере

# удаленную папку синхронизируем к нам
cd "$LCD/OUT"
lftp $USER:'P@$$W0RD'@$HOST:$PORT -e "set file:charset utf8;set ftp:charset utf8; cd $RCD/OUT; mirror --continue --delete --verbose; exit;"

# нашу папку синхронизируем на сервер
cd "$LCD/IN"
lftp $USER:'P@$$W0RD'@$HOST:$PORT -e "set file:charset utf8;set ftp:charset utf8; cd $RCD/IN; mirror --continue --reverse --delete --verbose; exit;"

предположим, что на удалённом сервере папку OUT надо синхронизировать с локальной папкой OUT, а локальную папку IN c удалённой IN.

К локальной папке лучше использовать полный путь, т. к. вы будете запускать по расписанию, то можете прописать путь относительно домашней папки пользователя от имени которого выполнится скрипт.

ЗЫ Почему я пишу пароль прямо в строку подключения? Потому что передать через переменную мне не удалось, возможно из-за спецсимволов в пароле. Я не стал париться, мой метод работает.

PS 25.07.2022 — добавил charset «set file:charset utf8;set ftp:charset utf8;» иначе может неверно работать с кириллицей

Отправить
Поделиться