Данный скрипт был создан мною для автоматизации ежедневного бекапа сайта на удаленный ftp-сервер.
Скрипт синхронизирует содержимое локальной директории на сервере с директорией на ftp (делает зеркало сайта) и пытается сделать бекап в виде архива и, в случае неудачи по причине нехватки места, удаляет самый старый архивный файл бекапа и повторяет попытку.
В качестве ftp-клиента выступает lftp. Протестировано на ftp-сервере proftpd.

#!/bin/bash
dir_to_backup=/var/www
backup_name_prefix=wiki
ftpserver=ftp.server.com
username=username
password=secretpassword
currentdate=$(date +%d-%m-%Y_%H_%M)

echo "lftp -e 'set ssl:verify-certificate no ssl:check-hostname false net:connection-limit 4; mirror -c -R $dir_to_backup /; bye;' ftp://$username:$password@$ftpserver" | /bin/bash

tar cf - $dir_to_backup | pigz > /tmp/$backup_name_prefix-$currentdate.tar.gz
ftp_error=$(echo "lftp -e 'set ssl:verify-certificate no; set ssl:check-hostname false; lcd ~; cd wiki; put /tmp/$backup_name_prefix-$currentdate.tar.gz; bye;' -u $username,$password $ftpserver" | /bin/bash 2>&1)
ftp_result=$?
echo $ftp_result
echo $ftp_error | grep "Disk full"
disk_is_full=$?
while [ $ftp_result != 0 ]&&[ $disk_is_full ]; do
echo "lftp -e 'set ssl:verify-certificate no; set ssl:check-hostname false; lcd ~; cd $backup_name_prefix; rm $backup_name_prefix-$currentdate.tar.gz; bye;' -u $username,$password $ftpserver" | /bin/bash 2>&1
oldestfile=$(echo "lftp -e 'set ssl:verify-certificate no; set ssl:check-hostname false; lcd ~; cd $backup_name_prefix; ls -A1 -t; bye;' -u $username,$password $ftpserver" | /bin/bash 2>&1 | tail -2 | head -1)
echo "lftp -e 'set ssl:verify-certificate no; set ssl:check-hostname false; lcd ~; cd wiki; rm $oldestfile; bye;' -u $username,$password $ftpserver" | /bin/bash 2>&1
ftp_error=$(echo "lftp -e 'set ssl:verify-certificate no; set ssl:check-hostname false; lcd ~; cd wiki; put /tmp/$backup_name_prefix-$currentdate.tar.gz; bye;' -u $username,$password $ftpserver" | /bin/bash 2>&1)
ftp_result=$?
echo $ftp_error | grep "Disk full"
disk_is_full=$?
done
rm -f /tmp/$backup_name_prefix-$currentdate.tar.gz
Enter your comment. Wiki syntax is allowed:
Y​ O B A G
 
  • linux_faq/backup_to_ftp_script.txt
  • Last modified: 2019/02/11 09:13
  • (external edit)