
У кого-нибудь есть bash-скрипт, который выполняет ежедневное/еженедельное/ежегодное резервное копирование, и который я могу использовать с cron.
По сути, резервные копии будут помещены в 3 папки. Ежедневная резервная копия будет содержать только файлы резервной копии этой недели. Еженедельная резервная копия будет содержать только файл еженедельной резервной копии этого месяца, а папка ежемесячной резервной копии будет содержать файл годовой резервной копии.
Спасибо!
решение1
Посмотрите на эти инструменты:
Вы можете обнаружить, что эти инструменты удовлетворяют требованиям и устраняют необходимость в скриптах. Я тоже использую скрипты, но они предназначены для особых ситуаций. Если вам нужны примеры того, что сделали другие люди, двое людей опубликовали свои скрипты резервного копированияздесь.
Резервное копирование было исчерпывающе рассмотрено на ServerFault. Если вы пытаетесь разработать стратегию резервного копирования, я предлагаю поискать на сайте. Если вы не можете найти ответ на конкретный вопрос, вы можете задать его в отдельном вопросе.
решение2
Нет, но это очень тривиально. С другой стороны, совсем не тривиально дать ответ на ваш вопрос на основе предоставленной вами информации.
Конечно, было бы намного проще контролировать тип резервного копирования (ежедневно/еженедельно/ежегодно) и место назначения из crontab, а не из скрипта bash (хотя это может быть просто вопросом отправки другого параметра в скрипт has).
Резервные копии не являются по своей сути важными — важно иметь возможностьвосстановитьВаши данные очень важны, поэтому для того, чтобы ваша резервная копия имела хоть какую-то ценность, она должна быть в формате, который позволит вам ее восстановить. Мы не можем вам сказать:
1) Which backup format is appropriate for your data
2) what backup tools you have on your system which are scriptable
3) what restore tools you are likely to have access to if you suffer a complete system failure
4) whether you need to support multi-volume / media changes in your backup
например, tar и compress доступны почти повсеместно, но они не очень надежны. CPIO более надежен, но не включает поддержку сжатия.
решение3
Внимание: собрано за 5 минут и не тестировалось (у меня не установлен Bash).
#!/bin/bash
#Usage: $0 [Yearly,Monthly,Weekly]
set PROTECTEDFILES = "/etc /usr/home /usr/local/etc"
set BACKUPDIR = "/usr/backups"
set BACKUPTAR = backup-`hostname -s`-`date "+%F"`.tgz
tar czf $BACKUPDIR/$1/$BAKCUPTAR $PROTECTEDFILES
В кронтабе:
0 0 1 1 * root /root/sbin/my_backup Yearly
0 0 1 * * root /root/sbin/my_backup Monthly
0 0 * * 6 root /root/sbin/my_backup Weekly
решение4
Я написал скрипт, который ротирует все резервные копии в одной папке, сохраняя X ежедневных, Y еженедельных и Z ежемесячных резервных копий.
Я сохраняю все резервные копии в папки.
/root/backup/YYYYMMDD
ежедневно.
Затем у меня есть следующий скрипт чередования:
#!/bin/bash
echo > /root/keep.txt
#writing dates of the backups that should be kept to the array
for i in {0..7}; do ((keep[$(date +%Y%m%d -d "-$i day")]++)); done
for i in {0..4}; do ((keep[$(date +%Y%m%d -d "sunday-$((i+1)) week")]++)); done
for i in {0..12}; do
DW=$(($(date +%-W)-$(date -d $(date -d "$(date +%Y-%m-15) -$i month" +%Y-%m-01) +%-W)))
for (( AY=$(date -d "$(date +%Y-%m-15) -$i month" +%Y); AY < $(date +%Y); AY++ )); do
((DW+=$(date -d $AY-12-31 +%W)))
done
((keep[$(date +%Y%m%d -d "sunday-$DW weeks")]++))
done
for i in {0..5}; do
DW=$(date +%-W)
for (( AY=$(($(date +%Y)-i)); AY < $(date +%Y); AY++ )); do
((DW+=$(date -d $AY-12-31 +%W)))
done
((keep[$(date +%Y%m%d -d "sunday-$DW weeks")]++))
done
#writing the array to file keep.txt line by line
for i in ${!keep[@]}; do echo $i >> /root/keep.txt; done
#delete all files that not mentioned in keep.txt
cd /root/backup
ls -1 /root/backup/ | sort /root/keep.txt /root/keep.txt - | uniq -u | xargs rm -rf
rm /root/keep.txt
Это позволит сохранять 7 ежедневных, 4 еженедельных, 12 ежемесячных и 5 ежегодных резервных копий.
Я получил большую часть логики изЭта тема