오늘은 대한입니다.
sun's longitude:299 45 11.56 
· 자유게시판 · 묻고답하기 · 알파문서 · RPMS list
· 사용자문서 · 팁/FAQ모음 · 리눅스Links · 자료실
· 서버정보 · 운영자 · Books/FAQ · FreeBSD
/board/read.php:소스보기  

질문과 답변 게시판입니다.

현재 실시간으로 이곳 서버의 설정파일(몇개)를 보여주고 있습니다.
서버의 설정내용에 관한 질문은 먼저 이곳 서버의 설정내용을 참고하시길 바랍니다.

[*** 쓰기 금지단어 패턴 ***]
글 본문 중간에 업로드할 이미지를 추가하는 방법 : @@이미지이름@@
ex) @@foo.gif@@
1677 번 글의 답장글: Re: c로 만든 백업스크립트..
글쓴이: 산이 [홈페이지] 글쓴날: 2003년 09월 25일 18:08:23 목(저녁) 조회: 809

제가 C 프로그램 수준이 깡통입니다.

아래..

time(&today_second);
today = gmtime(&today_second);

이부분을

time(&today_second);
today_second += 32400;
today = gmtime(&today_second);

이렇게 9시간을 더해야 KST 시간으로 됩니다.
C의 unix timestamp 아마 GMT 기준일겁니다.

9시간을 더하지 않고,
아마 새벽에 crond 으로 돌리면 항상 하루전날로 날짜가
찍힐겁니다.


[하얀피]님이 남기신 글:

>안녕하세요^^
>산이님 아래 스크립트좀 봐주세요..
>아래대로 컴파일해서 백업스크립트를
 돌리는데..
>날짜별로 백업이 되지 않고 처음에 생성한 폴더만 계속 찾아
생성시도하다가
 실패합니다.
>예를들면 2003년 09월 23일에 백업된 폴더가 있다면...
>그 다음날부턴 계속 2003-09-23 폴더만 생성하려고 하죠.
>도대체 이유가 뭘까요...
>지금은 크론으로 백업시간 5분전에 전날 폴더를 삭제해주는
방식으로 돌리고 있거든요..
>후우움.. 불편하긴 하네요....
>아래는 소스 입니다.
>파일도 링크시켜 두겠습니다.
>http://www.inet1004.net/backup.c
>-----------------------------------------------------------------------------------
---------
>#include <stdio.h>
>#include <time.h>
>#include <dirent.h>
>#include <string.h>
>
>/*---------------- 사용자가 고쳐야 할 부분 
-------------------------------------------------
>*/
>
>const char        *BACKUP_DIR        = "/backup";   //백업파일이
저장될 폴더을 절대경로로 지정해 
>줍니다.
>const char        *HOME_DIR        = "/home";          //백업할
홈폴더를 지정해 줍니다.
>const int        EXPIRE_DAY        = 3;                     //몇일이 지나면
삭제할건지를 지정합니다.
>
>/*---------------------------------------------------------------------------------
---------
>*/
>
>/*        php 의 mktime 과 같은 일을 하는 펑션.      */
>time_t SFmktime(int hour, int minute, int second, int month, int day, int
year){
>                struct tm *change_time;
>                time_t this_time;
>                time(&this_time);
>                change_time = gmtime(&this_time);
>                
>                year = year - 1900;
>                month = month - 1;
>
>                change_time->tm_sec                = second;
>                change_time->tm_min                = minute;
>                change_time->tm_hour        = hour;
>                change_time->tm_mday        = day;
>                change_time->tm_mon                = month;
>                change_time->tm_year        = year;
>                //printf("%02d-%02d-%02d\n",change_time->tm_year +
1900,change_time->tm_mon 
>+1,change_time->tm_mday);
>                return mktime(change_time);
>
>}
>
>/* main  --------------------------------------------*/
>int main(){
>                //time_t now;
>                time_t today_second; //오늘의 시간을 초로 저장받을
변수
>                time_t pastday; // 디렉토리목록을
 날짜로 변환한 후 저장받을 변수, 계속 바뀜
>                struct tm *today;
>
>                DIR *directory; // 디렉토리 저장공간.
>                struct dirent *dir_info; //디렉토리 이름을 저장할
구조체
>                char *remove_dirname;
>                char *create_dirname;
>                char *cmds;
>                
>                char sep[] = "-"; // 날짜 자를 구분자.
>                char *pp; // 임시로 잘려진 날짜.
>                int  i, expire_second;
>                char *year, *month, *day;
>                char days[11];
>
>                // 백업디렉토리이름을
 저장할 메모리를 초기화 한다.
>                remove_dirname = (char*)malloc(40);
>                create_dirname = (char*)malloc(40);
>                cmds           = (char*)malloc(1024);
>                // 시간 구조체를 초기화 시키고
>                time(&today_second);
>                today = gmtime(&today_second);
>                
>                // 오늘일자를 초로 환산하여 저장한다.
>                // today_second 
>                today_second = SFmktime(0,0,0,today->tm_mon +
1,today->tm_mday,today-
>>tm_year + 1900);
>               
printf("=================================================================\n&quo
t;);
>                printf(" %d-%d-%d 일자 백업스크립트 작동
정보입니다.\n",today-

>>tm_year+1900,today->tm_mon+1,today->tm_mday);
>               
printf("=================================================================\n&quo
t;);
>                //printf("%d\n",today_second);
>
>                // 우선 백업할 디렉토리내에 있는 폴더의 이름을
불러 directory 에 저장한다.
>                directory = opendir(BACKUP_DIR);
>                
>                //배열이 종료될때까지 루프를 돌린다.
디렉토리명을 dir_info 구조체에 저장한다.
>                while((dir_info = readdir(directory)) != NULL){
>                        // 만약 디렉토리 이름이 . or .. or logs 라면
넘어간다.
>                        if(strcmp(".",dir_info->d_name) == 0 ||
strcmp("..",dir_info->d_name) == 0 || 
>strcmp("logs",dir_info->d_name) == 0){
>                                continue;
>                        }
>                        // 디렉토리명을 "-" 구분자로
잘라내서 초를 뽑아낸후 오늘의 초와 비교한다.
>                        strncpy(days,dir_info->d_name,11);
>                        pp = strtok(days,sep);
>                        i =0;
>                        while( pp != NULL){
>                                if(i == 0)year = pp;
>                                if(i == 1)month = pp;
>                                if(i == 2)day = pp;
>                                pp = strtok(NULL,sep);
>                                i++;
>                        }
>                        // 날짜 형식에 맞지 않는 폴더명이 나오면
다음 폴더확인으로 넘어간다.
>                        if(atoi(year) == 0 || atoi(month) == 0 || atoi(day) ==
0){
>                                printf("백업형식에
 맞지않는 폴더명 [%s] 입니다. 무시합니다.\n",dir_info-

>>d_name);
>                               
printf("-----------------------------------------------------\n");
>                                continue;
>                        }
>
>                        printf("%02d-%02d-%02d 일자의 폴더가
존재합니다\n",atoi(year),atoi(month),atoi

>(day));
>                        // 디렉토리의 날짜를 초로 변환하여
저장됨.
>                        pastday =
SFmktime(0,0,0,atoi(month),atoi(day),atoi(year));
>                        expire_second = 86400 * EXPIRE_DAY;
>
>                        //printf("%d - %d = %d\n",today_second, pastday,
today_second-pastday);
>                        if((today_second - pastday) > expire_second){
>                                
>                                printf("삭제대상폴더:[%s]
        %d일 경과\n",dir_info->d_name,

>(today_second-pastday)/86400);                        
>                                //삭제작업을 한다.
>                               
sprintf(remove_dirname,"%s/%s",BACKUP_DIR,dir_info->d_name);
>                                printf(" %s 를
삭제합니다...\n",remove_dirname);

>                                if(rmdir(remove_dirname)){
>                                                printf("삭제실패!
 에러메세지를 확인하여 주십시오\n");

>                                               
printf("-----------------------------------------------------
>\n");
>                                                exit();
>                                }
>                               
printf("-----------------------------------------------------\n");
>
>                        }// end if
>                }
>        closedir(directory);
>        
>        // 불러온 디렉토리명을 한줄씩 저장한 후 년도와 월
일로 나누어 저장한다.
>       
sprintf(create_dirname,"%s/%02d-%02d-%02d",BACKUP_DIR,today->tm_year+1900,
today-
>>tm_mon+1,today->tm_mday);
>        printf("폴더 %s 를 생성합니다..\n",create_dirname);

>        if(mkdir(create_dirname,0700)){
>                printf("생성실패!
 에러메세지를 확인하여주십시오\n");

>                exit();
>        }
>        //백업폴더 명령 저장
>        
>        sprintf(cmds,"tar cvfpz %s/%02d-%02d-%02d/usr.local.tar.gz /usr/local/

>>> /var/log/backup.log 2>>
/var/log/backup.err.log",BACKUP_DIR,today->tm_year+1900,today-
>>tm_mon+1,today->tm_mday);
>        printf("%s\n",cmds);
>        system(cmds);
>        sprintf(cmds,"tar cvfpz %s/%02d-%02d-%02d/etc.tar.gz /etc >>
/var/log/backup.log 
>2>>
/var/log/backup.err.log",BACKUP_DIR,today->tm_year+1900,today->tm_mon+1,today-
>>tm_mday);
>        printf("%s\n",cmds);
>        system(cmds);
>        sprintf(cmds,"tar cvfpz %s/%02d-%02d-%02d/var.tar.gz /var >>
/var/log/backup.log 
>2>>
/var/log/backup.err.log",BACKUP_DIR,today->tm_year+1900,today->tm_mon+1,today-
>>tm_mday);
>        printf("%s\n",cmds);
>        system(cmds);
>        sprintf(cmds,"tar cvfpz %s/%02d-%02d-%02d/db.tar.gz /db >>
/var/log/backup.log 
>2>>
/var/log/backup.err.log",BACKUP_DIR,today->tm_year+1900,today->tm_mon+1,today-
>>tm_mday);
>        printf("%s\n",cmds);
>        system(cmds);
>        sprintf(cmds,"tar cvfpz %s/%02d-%02d-%02d/sys.tar.gz /sys >>
/var/log/backup.log 
>2>>
/var/log/backup.err.log",BACKUP_DIR,today->tm_year+1900,today->tm_mon+1,today-
>>tm_mday);
>        printf("%s\n",cmds);
>        system(cmds);
>        
>        //home 폴더의 목록을 불러와 저장한다.
>        directory = opendir(HOME_DIR);
>                
>        //배열이 종료될때까지 루프를 돌린다. 디렉토리명을
dir_info 구조체에 저장한다.
>       
sprintf(create_dirname,"%s/%02d-%02d-%02d/home",BACKUP_DIR,today-
>>tm_year+1900,today->tm_mon+1,today->tm_mday);
>        if(mkdir(create_dirname,0700)){
>                printf("생성실패!
 에러메세지를 확인하여주십시오\n");

>                exit();
>        }
>        while((dir_info = readdir(directory)) != NULL){
>                // 만약 디렉토리 이름이 . or .. or logs 라면
넘어간다.
>                if(strcmp(".",dir_info->d_name) == 0 ||
strcmp("..",dir_info->d_name) == 0 || strcmp
>("logs",dir_info->d_name) == 0){
>                        continue;
>                }
>                sprintf(cmds,"tar cvfpz %s/%02d-%02d-%02d/home/%s.tar.gz %s/%s

>>> /var/log/backup.log 2>>
/var/log/backup.err.log",BACKUP_DIR,today->tm_year+1900,today-
>>tm_mon+1,today->tm_mday,dir_info->d_name,HOME_DIR,dir_info->d_name);
>                printf("%s\n",cmds);
>                system(cmds);
>        }//end of while
>
>        sprintf(cmds,"chmod -R 0600
%s/%02d-%02d-%02d",BACKUP_DIR,today-
>>tm_year+1900,today->tm_mon+1,today->tm_mday);
>        system(cmds);
>        system("echo \"백업완료\"
 >> /var/log/backup.log");
>} 

========================================

 
이전글 : c로 만든 백업스크립트..
다음글 : 이미지링크 방지 스크립트 문의  
 from 61.254.75.40
JS(Redhands)Board 0.4 +@

c로 만든 백업스크립트.. 이미지링크 방지 스크립트 문의
인쇄용 


apache lighttpd linuxchannel.net 
Copyright 1997-2026. linuxchannel.net. All rights reserved.

Page loading: 0.02(server) + (network) + (browser) seconds