синхронизация 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;» иначе может неверно работать с кириллицей