Создание бэкапа сайта заключается в архивировании его директории. Проблема таких бэкапов в том, что они постоянно накапливаются и не удаляются. Место под бэкап обычно имеет ограниченный размер, и когда оно закончится новый бэкап нам не сохранить.nnДанный скрипт создает архив директории сайта и затем производит ротации уже созданных архивов. Вы можете указать сколько архивов за день, за неделю, за месяц хранить.nnОсобенность ротации данного скрипта, что он не использует команду find -mtime для определения удалять архив или нет. Минус такого метода в том, что в случае проблем с новыми архивами, используя mtime можно удалить все архивы. В нашем скрипте ротация производится именно по количеству бэкапов, а не времени их создания.nnСкрипт производит ротация в локальном каталоге. Но это не проблема если подключать удаленное хранилище как локальную директорию. Скрипт был протестирован при монтировании ftp как curlftps и Amazon s3 как s3fs.nnДля работы скрипта необходимо создания дерева каталоговn
- daily
- weekly
- monthly
Скрипт является основой, которую можно просто доработать для своих целей. Собственно текст скрипта ниже:
n
#!/bin/shnn### System Setup ###nDIR="/var/www"nNOW=$(date +"%d-%m-%Y")nDAY=$(date +"%a")nBACKUP=/backup/prodnnDAILY=6nWEEKLY=4nMONTHLY=4nDNOW=`date +%u`nDOM=`date +%d`nn######rotation###############nrotateBackups () {nmdbdir="$1"nkeep="$2"n(cd ${mdbdir}ntotalFilesCount=`/bin/ls -1 | wc -l`nif [ ${totalFilesCount} -gt ${keep} ]; thennpurgeFilesCount=`expr ${totalFilesCount} - ${keep}`npurgeFilesList=`/bin/ls -1tr | head -${purgeFilesCount}`nrm -fv ${purgeFilesList} | sed -e 's/^//g'nfin)n}n###########################nnFILE="fs-$NOW.tar.gz"ntar -czvpf $BACKUP/daily/$FILE $DIRnn[ $DNOW = "1" ] && (cp $BACKUP/daily/$FILE $BACKUP/weekly/)n[ $DOM = "01" ] && (cp $BACKUP/daily/$FILE $BACKUP/monthly/)nnif [ -d $BACKUP ]; thennrotateBackups "$BACKUP/daily" "$DAILY"nrotateBackups "$BACKUP/weekly" "$WEEKLY"nrotateBackups "$BACKUP/monthly" "$MONTHLY"nfi