
누구든지 cron과 함께 사용할 수 있는 일일/주간/연간 백업 스크립트를 수행하는 bash 스크립트를 가지고 있습니다.
기본적으로 백업은 3개의 폴더에 저장됩니다. 일일 백업에는 이번 주의 백업 파일만 포함됩니다. 주간 백업에는 이번 달의 주간 백업 파일만 있고, 월 백업 폴더에는 연간 백업 파일만 있습니다.
감사해요!
답변1
답변2
아니요. 하지만 매우 사소한 일입니다. OTOH는 귀하가 제공한 정보를 기반으로 귀하의 질문에 대한 답변을 제공하는 것이 결코 쉬운 일이 아닙니다.
확실히 bash 스크립트보다는 crontab에서 백업 유형(매일/매주/매년)과 대상을 제어하는 것이 훨씬 더 간단할 것입니다(단순히 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와 압축은 거의 보편적으로 사용할 수 있지만 그다지 강력하지는 않습니다. 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개 백업이 유지됩니다.
나는 논리의 대부분을 얻었습니다.이 주제