Собственно, для использования rsync задумал такую штуку:
монтируем ftp в файловую систему как папку (ftp на винде, rsync для винды не предлагать)
делаем синхронизацию и отмонтируем
Для монтирования есть замечательная прога curlftpfs.
Устанавливаем:
$sudo yum install curlftpfs
Подгружаем модуль ядра Fuse
$sudo modprobe fuse
команда монтирования в общем виде:
$sudo curlftpfs ftp.server.ru/folder /mnt/ftp/ -o user=ftpuser:ftppassword
чтобы монтировать не от рута, дописываем в файл /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/sh
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
Добавляем его в Cron и вуаля :)