매일, 매주, 매년 백업 스크립트

매일, 매주, 매년 백업 스크립트

누구든지 cron과 함께 사용할 수 있는 일일/주간/연간 백업 스크립트를 수행하는 bash 스크립트를 가지고 있습니다.

기본적으로 백업은 3개의 폴더에 저장됩니다. 일일 백업에는 이번 주의 백업 파일만 포함됩니다. 주간 백업에는 이번 달의 주간 백업 파일만 있고, 월 백업 폴더에는 연간 백업 파일만 있습니다.

감사해요!

답변1

다음 도구를 살펴보세요.

이러한 도구가 요구 사항을 충족하고 스크립트가 필요하지 않다는 것을 알 수 있습니다. 나는 또한 스크립트를 사용하지만 그것은 특별한 상황을 위한 것입니다. 다른 사람들이 수행한 작업의 예를 보려면 두 사람이 백업 스크립트를 게시했습니다.여기.

백업은 ServerFault에서 철저하게 다루어졌습니다. 백업 전략을 개발하려는 경우 사이트를 검색하는 것이 좋습니다. 특정 질문에 대한 답변을 찾을 수 없는 경우 별도의 질문으로 질문할 수 있습니다.

답변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개 백업이 유지됩니다.

나는 논리의 대부분을 얻었습니다.이 주제

관련 정보