2. crond
=> 원하는 시간 및 날짜마다 원하는 명령을 실행(명령을 반복 실행)
=> 데이타 백업을 하기 위해 사용
=> crond 실행 : standalone 방식
]# ps -xa | grep crond
3187 ? Ss 0:00 crond
※crond이 실행되어 있지 않은 경우
]# service crond start
]# chkconfig --level 2345 crond on
※ crond는 대부분 실행되어 있다. => 시스템에서 crond을 이용하여 예약 작업을 실행하기 때문
]# vi /etc/crontab => 시스템이 사용하는 예약정보를 저장한 파일
=> crond를 활용한 예약 관리
]# crontab -e => 예약 생성, 변경, 삭제, 확인 : vi 편집기 이용
분 시 일 월 요일 명령 => 반복적인 명령을 실행하도록 설정
.....
※ ]# crontab -l => 예약 확인
]# crontab -r => 모든 예약 삭제
예시) ]# crontab -e
30 * * * * /root/backup.sh => 매월 매일 매시 30분에 명령 실행
30 04 * * * /root/backup.sh => 매월 매일 04시 30분에 명령 실행
30 04 * * 5 /root/backup.sh => 매월 매주 금요일 04시 30분에 명령 실행
30 04 1 * * /root/backup.sh => 매월 1일 04시 30분에 명령 실행
30 04 1 1 * /root/backup.sh => 1월 1일 04시 30분에 명령 실행
30 04 * * 1-5 /root/backup.sh => 매월 매주 월요일부터 금요일까지 04시 30분에 명령 실행
30 04 1 1-12/3 * /root/backup.sh => 1월부터 12월까지 3개월마다 1일 04시 30분에 명령 실행
※ 요일 : 0 또는 7 - 일요일 1~6 - 월요일~토요일
문제) 매일 오전 6시 20분에 타임서버을 이용하여 시간이 동기화 되도록 설정해 주세요.
]# date 091106192013 => 시간 변경 후 1분후 시간 확인
=> 데이타 백업 : 증분(incremental)백업,업데이트(update)백업,증가분(differential)백업 : 압축프로그램을 이용
※ 백업 관련 정보를 사용 => 날짜정보를 활용
]# date +%Y%m%d => date에 의해 출력될 패턴을 지정
20130911
]# date --date '2 months ago' +%Y%m%d => 2달전 date 정보를 패턴에 맞게 출력
20130711
]# date +%a => 요일 출력
수
]# today=$(date +%Y%m%d) => 시스템변수 today에 데이타를 저장
]# echo $today => echo 명령을 이용하여 시스템변수 today의 데이타를 화면에 출력
]# tar cvzf etc_$today-fullbackup.tar.gz /etc => /etc 디렉토리를 백업
( $ 뒤에 _는 변수명으로 인식해서 파일명으로 지정되지 않는다)
=> 압축파일명 :etc_20130911-fullbackup.tar.gz
※ 증분백업를 위한 ShellScript 프로그램 작성 => tar 명령에 -g 옵션을 활용
]# vi backup.sh
#!/bin/bash
backup_dir=/backup
time=$(date +%Y%m%d%H%M)
day=$(date +%a)
backup_source=/home
if [ ! -d $backup_dir ]
then
mkdir $backup_dir
fi
if [ $day = "일" ]
then
rm -f $backup_dir/home.backup.list
tar -g $backup_dir/home.backup.list -czf $backup_dir/home_$time.full-backup.tar.gz $backup_source
else
tar -g $backup_dir/home.backup.list -czf $backup_dir/home_$time.backup.tar.gz $backup_source
fi
]# chmod 700 backup.sh
]# ./backup.sh
]# crontab -e
30 04 * * * /root/backup.sh
문제) 위에서 백업 데이타들중 3달전 백업파일을 삭제하는 프로그램을
작성하고 crond을 이용하여 매달 첫째주 일요일에 실행되도록 설정하세요.
]# vi backup_remove.sh
time=$(date --date '3 months ago' +%Y%m)
backup_dir=/backup
rm -rf $backup_dir/home_$time*
]# chmod 700 backup_remove.sh
]# crontab -e
00 06 1-7 * 0 /root/backup_remove.sh