Собственно, для использования rsync задумал такую штуку:
монтируем ftp в файловую систему как папку, делаем синхронизацию и отмонтируем.
Для монтирования есть замечательная утилита curlftpfs.
Устанавливаем:
$ sudo yum install curlftpfs
Подгружаем модуль ядра Fuse
$ sudo modprobe fuse
Команда монтирования в общем виде:
$ sudo curlftpfs ftp.server.ru/folder /mnt/ftp/ -o user=ftpuser:ftppassword
Чтобы монтировать не от root, дописываем в файл /etc/fuse.conf строчку user_allow_other, а в команду монтирования в конце после запятой allow_other
$ curlftpfs ftp.server.ru/folder /mnt/ftp/ -o user=ftpuser:ftppassword,allow_other
Размонтирование :
$ sudo fusemount -u /mnt/ftp
Посмотреть, что у нас в данный момент смонтировано:
$ df -h
Мой скрипт для бэкапа через монтирование ftp:
#!/bin/bash HOST="0.0.0.0" USER="User-backup" PASSWORD="Password" DATE=`date +%m.%d.%Y` TIME=`date +%H:%M:%S` LOGFILE="/var/log/rsyncftp/rsyncftp-$DATE.log" # монтируем каталог FTP как папку curlftpfs $HOST/monitor /mnt/ftp/ -o user=$USER:$PASSWORD # директория откуда забираем файлы FILE="/var/spool/asterisk/monitor/" # директория в системе куда смонтирован удалённый FTP BACKUPDIR="/mnt/ftp" # директория для временных файлов # по логике работы rsync, он создает временные файлы на стороне приемника а потом делает move # поскольку у нас все-таки FTP так не работает, указываем временную папку в файловой системе TEMPDIR="/tmp/rsync" #создаем удобочитаемый лог-файл echo "=============================================================" > $LOGFILE echo "This is the LOG file of telephone records backup script:" >> $LOGFILE echo "=============================================================" >> $LOGFILE echo " " >> $LOGFILE echo Data: $DATE Time: $TIME >> $LOGFILE echo "" >> $LOGFILE echo "-------------------------------------------------------------" >> $LOGFILE echo "-------------------- Log of rsync working: ------------------" >> $LOGFILE echo "-------------------------------------------------------------" >> $LOGFILE echo "" >> $LOGFILE rsync -rltzcuh --stats --progress --temp-dir=$TEMPDIR $FILE $BACKUPDIR >> $LOGFILE # используемые здесь опции rsync чтобы не забыть: # -a архивация (соответствует -rlptgoD ), тут не годится, права на FTP не передаются # -r рекурсивно с подпапками # -l копировать символьные ссылки # -p копировать права пользователей # -t копировать время создания файла # -g копировать права группы # -o копировать владельца # -D копировать информацию о символьных и блочных устройствах # -z сжимать при передаче # -u update - копировать только изменившиеся файлы # -h вывод логов в читаемой форме # -v степень детализации от v до vvvv # --stats вывод статистики # --progress вывод прогресса работы # --temp-dir= папка для временных файлов, по-умолчанию создается на стороне - приёмнике # -n эмулировать работу, нужно для отладки # считаем размер папки и размер архивов и выводим DUFILE=`du -sh $FILE` DUBACKUP=`du -sh $BACKUPDIR` echo "" >> $LOGFILE echo "-------------------------------------------------------------" >> $LOGFILE echo "-------------------------------------------------------------" >> $LOGFILE echo "Size of catalog with recordings files: " >> $LOGFILE echo " $DUFILE" >> $LOGFILE echo "-------------------------------------------------------------" >> $LOGFILE echo "Size of the Backup catalog (on FTP):" >> $LOGFILE echo " $DUBACKUP" >> $LOGFILE echo "-------------------------------------------------------------" >> $LOGFILE # выводим список лог-файлов echo "-------------------------------------------------------------" >> $LOGFILE echo "List of logfiles in /var/log/rsyncftp/ :" >> $LOGFILE echo "" >> $LOGFILE find /var/log/rsyncftp/ -type f -print >> $LOGFILE # удаляем логи старше 60 дней echo "" >> $LOGFILE echo "-------------------------------------------------------------" >> $LOGFILE echo "List of deleted logfiles older 60 days:" >> $LOGFILE echo "" >> $LOGFILE find /var/log/rsyncftp/ -type f -mtime +61 -print -delete >> $LOGFILE echo "" >> $LOGFILE echo "=============================================================" >> $LOGFILE echo "========== End of LOG file, best wishes from Welk ===========" >> $LOGFILE echo "=============================================================" >> $LOGFILE echo "" >> $LOGFILE # отправляем лог по почте cat $LOGFILE | mail -s "Asterisk records backup LOG of $DATE" mail@domain.com umount /mnt/ftp