admin write
blogblogblogbloglocation loglocation logtag listtag listguest bookguest book
rss feed
내가 미친게지-_-;;
새벽에 할 일 없어서 perl로 백업스크립트 짜더니..
이젠 php로 증분백업을 (...) 미친게야....

#!/usr/bin/php

<?php
// 제외할 목록 함수
function noUser($id){
switch ($id){
case "lost+found" :
case "test" : return false; break;
default : return true;
}
}

$oneDay=86400; //60*60*24초
$tmpTime=time();

$nYear=date("Y",$tmpTime);
$nMonth=date("m",$tmpTime);
$nDay=date("d",$tmpTime);

$nTime=mktime(0, 0, 0, $nMonth, $nDay, $nYear);
$nWeek=date("D",$nTime);

// 전체 백업 날짜가 바뀌면 아래 $allBackupDay 의 요일과 switch 문의 x 값을 바꺼준다.
// x 값은 전체 백업요일는 7 그 다음요일은 1 그다음은 2 .... 식으로하며 전체 백업요일 전은 6이다.
// 예를 들어 전체 백업날이 월요일이면 다음과 같다.
// Mon:7, Tue:1, Wed:2, Thu:3, Fri:4, Sat:5, Sun:6
$allBackupDay="Mon";
switch($nWeek){
case "Mon" : $x=7; break;
case "Tue" : $x=1; break;
case "Wed" : $x=2; break;
case "Thu" : $x=3; break;
case "Fri" : $x=4; break;
case "Sat" : $x=5; break;
case "Sun" : $x=6; break;
}

// 전주 일요일 날자 구함, 지워질 날짜 구함
$tTime=$nTime-($oneDay*$x);
$delTime=$tTime-($oneDay*7);
$tWeek=date("D",$tTime);

// 오늘이 일요일이면 오늘 날짜를, 아니면 전주 일요일 날짜를
if($nWeek==$allBackupDay) $backup_dir=date("Y-m-d",$nTime);
else $backup_dir=date("Y-m-d",$tTime);

$backup_root="/backup/"; // 백업 폴더
$backup_dir2=date("m-d",$nTime); // 2차 백업 폴더
$list_root="/sys/crond/list/"; // 리스트 관리 폴더
$delete_dir=date("Y-m-d",$delTime); // 삭제할 날짜 폴더

// /backup/2004-01-01/01-01/ 생성
// home백업 디렉토리 생성
// db백업 디렉토리 생성
exec("mkdir -p ".$backup_root.$backup_dir."/".$backup_dir2."/home");
exec("mkdir -p ".$backup_root.$backup_dir."/".$backup_dir2."/db");
if(!file_exists($list_root)) exec("mkdir -p ".$list_root);

if($nWeek==$allBackupDay){ // 전체 백업 날짜이면 디렉토리 생성
exec("rm -rf ".$backup_root.$delete_dir); // 2주전 데이터 삭제
exec("rm -f ".$list_root."*"); // 리스트 삭제
}

//시작 측정 시작
$time=date("Ymd-H:i:s",time());
exec("touch ".$backup_root.$backup_dir."/".$backup_dir2."/start-$time");

/********************* 매일 실행 될 부분 시작 *********************/

// 유저리스트 불러옴
exec("ls /home > ".$list_root."user_list");
$userList=file($list_root."user_list");
for($i=0;$i<count($userList);$i++) $userList[$i]=trim(str_replace("\n","",$userList[$i]));
exec("rm -f ".$list_root."user_list");

// 디비 리스트 불러옴
// 파일의 내용을 한줄씩 읽어서 배열로 저장
// 줄바꿈표시와 좌우 여백 삭제
// 디비리스트 삭제
// 디비 저장
exec("ls /db > ".$list_root."db_list");
$dbList=file($list_root."db_list");
for($i=0;$i<count($dbList);$i++) $dbList[$i]=trim(str_replace("\n","",$dbList[$i]));
exec("rm -f ".$list_root."db_list");
for($i=0;$i<count($dbList);$i++){
exec("tar -cpzf ".$backup_root.$backup_dir."/".$backup_dir2."/db/".$dbList[$i].".tar.gz /db/".$dbList[$i]." 2>/dev/null");
}

exec("tar -cpzf ".$backup_root.$backup_dir."/".$backup_dir2."/usr.local.tar.gz /usr/local 2>/dev/null");
exec("tar -cpzf ".$backup_root.$backup_dir."/".$backup_dir2."/etc.tar.gz /etc 2>/dev/null");
exec("tar -cpzf ".$backup_root.$backup_dir."/".$backup_dir2."/var.tar.gz /var 2>/dev/null");
exec("tar -cpzf ".$backup_root.$backup_dir."/".$backup_dir2."/sys.tar.gz /sys 2>/dev/null");

/********************* 매일 실행 될 부분 끝 ***********************/

for($i=0;$i<count($userList);$i++){
if(noUser($userList[$i])){
exec("tar -g ".$list_root.$userList[$i]." -cvpzf ".$backup_root.$backup_dir."/".$backup_dir2."/home/".$userList[$i].".tar.gz /home/".$userList[$i]." 2>/dev/null");
}
}

exec("chmod -R 600 ".$backup_root.$backup_dir);

$time=date("Ymd-H:i:s",time());
exec("touch ".$backup_root.$backup_dir."/".$backup_dir2."/end-$time");
?>
태그

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

  1. 2006.11.09 11:01
    댓글 주소 수정/삭제 댓글
    형...이제 C++로......
  2. 2010.11.25 05:17
    댓글 주소 수정/삭제 댓글
    비밀댓글입니다