System/OS
2013.04.23 13:14
[perl] 영규가 만든 스크립트.. 하하..
조회 수 10678 댓글 0
#!/usr/bin/perl
#################################################################################################
## ##
## 제 작 : 후리자 (2003년 4월 3일) maritpe@hotmail.com ##
## 파일명 : fullbackup.pl ##
## ##
## 풀백업을 쉽게 하게 해준다 ##
## ##
#################################################################################################
$computer = "cmd"; # 백업파일 앞에 붙는 글자
$tgzpath = "/backup/"; # 백업한 파일을 저장할 경로 (뒤에 슬래쉬 꼭!)
$tarfile = "/bin/tar"; # tar 파일의 경로
$rmfile = "/bin/rm"; # rm 파일의 경로
# 백업할 디렉토리 목록
@backupdir = (
[ "/home/users/js/", "" ],
[ "/home/users/simi/", "" ],
[ "/home/users/stormbr/", "" ],
[ "/home/users/tohlead/", "" ],
[ "/home/users/greesp/", "" ],
[ "/home/staff/hooriza/", "--exclude=/home/staff/hooriza/storage" ],
[ "/home/staff/lodoss/", "" ],
[ "/home/staff/dawnsea2/", "" ],
[ "/htdocs/", "" ],
[ "/cmd/club/", "--exclude=/cmd/club/storage" ]
);
#################################################################################################
# 명령어 실행하기
sub execCommand($)
{
my($command) = @_;
print "명령실행 : $command\n";
$result = `$command`;
if ($result)
{
print "실행결과 : $result\n";
}
}
# 파일내용 읽기
sub getFileData($)
{
my($filename) = @_;
$retval = `cat $filename`;
$retval =~ s/\n//gi;
return $retval;
}
# 파일내용 쓰기
sub setFileData($$)
{
my($filename, $data) = @_;
`echo $data > $filename`;
}
# 현재 날짜 얻기
sub getCurrentDate()
{
$retval = `date +%Y%m%d`;
$retval =~ s/\n//gi;
return $retval;
}
if ($#ARGV != 0)
{
die "오류 : 인자로 full 또는 incr 가 들어가야합니다.\n";
}
$backuptype = shift(@ARGV);
if ($backuptype ne "full" && $backuptype ne "incr")
{
die "오류 : 인자로 full 또는 incr 가 들어가야합니다.\n";
}
$lastFBdatefile = $tgzpath.$computer."_fullbackup_lastdate"; # 마지막으로 full 백업이 된 날짜 파일
$lastIBdatefile = $tgzpath.$computer."_incrbackup_lastdate"; # 마지막으로 incr 백업이 된 날짜 파일
$today = getCurrentDate();
$lastFBdate = getFileData($lastFBdatefile); # 마지막으로 full 백업 된 날짜 얻기
$lastIBdate = getFileData($lastIBdatefile); # 마지막으로 incr 백업 된 날짜 얻기
# fullbackup 디렉토리 만들기
execCommand("mkdir ".$tgzpath."fullbackup");
# incrbackup 디렉토리 만들기
execCommand("mkdir ".$tgzpath."incrbackup");
foreach my $arrayret(@backupdir)
{
# 배열 값 받아오기
$destdir = @$arrayret[0];
$option = @$arrayret[1];
# 슬래쉬를 언더바로 바꾼 대상경로
$udestdir = $destdir;
$udestdir =~ s/\//_/gi;
# 기존의 백업파일 삭제하기
if ($backuptype eq "full")
{
if ($lastFBdate ne "")
{
print "기존의 압축파일을 삭제합니다\n";
# 지울압축파일의 경로 설정
$deltgzfile = $tgzpath."fullbackup/".$computer.$lastFBdate.$udestdir.".tgz";
# 삭제하기
execCommand("$rmfile -f $deltgzfile");
}
print "새로운 압축파일을 만듭니다\n";
# 압축파일의 경로 설정
$tgzfile = $tgzpath."fullbackup/".$computer.$today.$udestdir.".tgz";
# 압축하기
execCommand("$tarfile -czvf $tgzfile $destdir $option");
}
else
{
if ($lastFBdate > $lastIBdate) # full 백업한 이후로 incr 백업을 한번도 안 했으면
{
print "기존의 압축파일을 삭제합니다\n";
# 지울압축파일의 경로 설정
$deltgzfile = $tgzpath."incrbackup/".$computer."????????".$udestdir.".tgz";
# 삭제하기
execCommand("$rmfile -f $deltgzfile");
}
print "새로운 압축파일을 만듭니다\n";
# 압축파일의 경로 설정
$tgzfile = $tgzpath."incrbackup/".$computer.$today.$udestdir.".tgz";
# 압축하기
execCommand("$tarfile --newer '$lastIBdate' -zcf $tgzfile $destdir $option");
}
}
if ($backuptype eq "full")
{
# 마지막으로 full 백업 된 날짜 수정
setFileData($lastFBdatefile, $today);
}
else
{
# 마지막으로 incr 백업 된 날짜 수정
setFileData($lastIBdatefile, $today);
}
번호 | 분류 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|---|
154 | System/OS | [linux] iptables 초간단 세팅 스크립트 | hooni | 2017.09.26 | 1404 |
153 | System/OS | [linux] man 명령어 뽀개기.. | hooni | 2003.04.23 | 8779 |
152 | System/OS | [linux] Masquerade 가상 ip분할기법 | hooni | 2003.04.23 | 48022 |
151 | System/OS | [linux] Oracle8.1.6, Mysql+PHP+Zend Optimizer+APACHE+Tomcat(jsp,servlet)+IMAP+gd | hooni | 2003.04.23 | 32530 |
150 | System/OS | [linux] Proftpd 설치 가이드 | hooni | 2003.04.23 | 13084 |
149 | System/OS | [linux] ProFTPD 타임아웃 설정 | hooni | 2003.04.23 | 12911 |
148 | System/OS | [linux] resolv.con 초기화 되는 문제 | hooni | 2014.04.05 | 4701 |
147 | System/OS | [linux] root 전환시 패스워드 없이 su 사용하기 | hooni | 2013.12.22 | 12780 |
146 | System/OS | [linux] root도 삭제하지 못하는 파일 속성 | hooni | 2003.04.23 | 12460 |
145 | System/OS | [linux] sendmail 설정/사용 | hooni | 2003.04.23 | 14640 |
144 | System/OS | [linux] split 명령어 | hooni | 2014.03.11 | 4392 |
143 | System/OS | [linux] SSH에 대한 기본 설명과 설치/설정 | hooni | 2013.04.23 | 10664 |