
Qualquer pessoa tem algum script bash que faça um script de backup diário/semanal/anual que eu possa usar com o cron.
Basicamente, ele colocará os backups em 3 pastas. O backup diário teria apenas os arquivos de backup desta semana. O backup semanal teria apenas o arquivo de backup semanal deste mês e a pasta de backup mensal teria o arquivo de backup anual.
Obrigado!
Responder1
Veja estas ferramentas:
Você pode descobrir que essas ferramentas atendem aos requisitos e eliminam a necessidade de scripts. Eu também uso scripts, mas eles são para situações específicas. Se você quiser exemplos do que outras pessoas fizeram, duas pessoas postaram seus scripts de backupaqui.
Os backups foram abordados exaustivamente no ServerFault. Se você está tentando desenvolver uma estratégia de backup, sugiro pesquisar no site. Se você não conseguir encontrar a resposta para uma pergunta específica, poderá fazer isso em uma pergunta separada.
Responder2
Não - mas é muito trivial de fazer. OTOH está longe de ser trivial fornecer uma resposta à sua pergunta com base nas informações que você forneceu.
Certamente, seria muito mais simples controlar o tipo de backup (diário/semanal/anual) e o destino do crontab em vez do script bash (embora isso possa ser simplesmente uma questão de enviar um parâmetro diferente para o script has).
Os backups não são intrinsecamente importantes - ser capaz derestaurarseus dados são muito importantes - portanto, para que seu backup tenha algum valor, ele deve estar em um formato que permita restaurá-lo. Não podemos te dizer:
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
por exemplo, tar e compress estão quase universalmente disponíveis - mas não são muito robustos. CPIO é mais robusto, mas não incorpora suporte à compactação.
Responder3
Aviso: hackeados juntos em 5 minutos e não testados (não tenho o Bash instalado).
#!/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
No crontab:
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
Responder4
Eu escrevi o script que gira todos os backups dentro de uma pasta, mantendo X backups diários, Y semanais e Z backups mensais.
Eu levo todos os backups para pastas
/root/backup/YYYYMMDD
diariamente.
Então, eu tenho o seguinte script rotativo:
#!/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
Isso manterá 7 backups diários, 4 semanais, 12 mensais e 5 anuais.
Eu obtive a maior parte da lógica deEste tópico