주기적인 스케줄링
= cron
= 설정한 시간에 스케줄링 실행
일시적인 스케줄링
= anacron, at
= 한 번 실행 후 스케줄링 삭제
<cron 구성>
[분] [시간] [날짜] [달] [요일] [실행할 명령어]
<세부사항>
[분] : 00~59
[시간] : 00~23
[날짜] : 1~31
[달] : 1~12
[요일] : 1(월요일), 2(화요일),...,0/7(일요일)
<응용>
50 11 * * * /home/cron.sh - 매일 11시 50분 실행
15 1,2,5,20-23 1 * * /home/cron.sh - 1월 1,2,5,20-23시 15분에 실행
*/1 * * * * /home/cron.sh - 1분마다 실행
1 * * * * /home/cron.sh - 매시간 1분에 실행
실습
#crontab [옵션] <옵션> -e : 스케줄 입력 -r : (remove) 스케줄 삭제 -l : 스케줄 확인
# crontab -e
매일 11시 43분 home 디렉터리에 있는 cron.sh을 실행
# cd /home -> home 디렉터리로 이동 # vi cron.sh -> cron.sh 편집기 실행 # chmod 777 cron.sh -> cron.sh의 777 허가권 부여
cron.sh의 내용 :
etc 디렉터리에 있는 passwd 파일을 home 디렉터리에 복사
# crontab -l
cron 테이블에 있는 목록을 보여준다.
# crontab -r
cron 테이블에 있는 목록 삭제
cf) crontab 실행명령으로 cron.sh으로 두는 이유??
- crontab에 설정 가능한 명령어는 하나밖에 안된다.
하지만cron 파일을 실행한다.
라는 명령어를 설정한 뒤 cron 파일에 에디터를 이용한다면 여러 명령어를 순차적으로 실행하게 설계할 수 있다.
(ex. 어떤 디렉터리에 마운트 -> 해당 디렉터리에서 파일 복사 -> 언마운트)
백업 스케줄링 1
# crontab -e
# vi cron.sh <cron.sh 세부내용> mkdir /home/mnt mount /dev/md1 /home/mnt cp -rf /home/* /home/mnt umount /home/mnt
home 디렉터리 안에 mnt 디렉터리가 생성
/dev/md1 디스크가 home 디렉터리의 mnt 디렉터리에 마운트됨
생성된 mnt 디렉터리 안에 복사가 이루어짐
cf) 소유자가 test1, test2인 file1, file2의 출처??
이전 쿼터 실습간 md1을 마운트한 data 디렉터리의 파일이 왜 해당 mnt 디렉터리에 있을까?
= 디스크를 특정 디렉터리에 마운트를 했다면 마운트한 해당 디렉터리는 단순히 디스크의 매개체 역할을 실행한다.
즉, /dev/md1--(마운트)-->/data를 실행한 뒤 /data 디렉터리에 파일을 생성했다면 /data 디렉터리에 생성되는것이 아닌 md1 디스크에 생성이 되는 것
= 그러므로 /dev/md1을 /home/mnt에 마운트를 했다면 /data를 매개체로 디스크에 생성한 파일이 옮겨가는 것백업 스케줄링 2
# crontab -e
# vi cron.sh <cron파일 세부내용> mkdir /home/mnt mount /dev/md1 /home/mnt tar -cvzf /home/test.tar /home/* mv /home/test.tar /home/mnt umount /dev/md1
home 디렉터리를 tar파일로 압축하고 마운트한 mnt 디렉터리에 옮기기
백업 실습
- cron.sh 파일에 파일생성/삭제 + 증분 백업 명령어
<디렉터리 및 데이터 파일 생성> #mkdir backup data -> backup, data 디렉터리 생성 # touch data/data1~5
<증분백업의 풀 백업> # tar -cvzf backup/Full-Back.tar --listed-incremental backup/backuplist data
<데이터추가 후 증분 백업(data6~8)(1차)> # tar -cvzf backup/incre1.tar --listed-incremental backup/backuplist data * 파일이름 incre1.tar
<데이터추가 후 증분 백업(data9~11)(2차)> # tar -cvzf backup/incre2.tar --listed-incremental backup/backuplist data * 파일이름 incre2.tar
<데이터삭제 후 증분 백업(data1,3,5,7,9,11)(3차)> # tar -cvzf backup/incre3.tar --listed-incremental backup/backuplist data
<데이터추가 후 증분 백업(data20, 30)(4차)> # tar -cvzf backup/incre4.tar --listed-incremental backup/backuplist data
4차까지 백업 한 뒤의 backup 디렉터리 및 backuplist 파일
<증분백업파일 압축해제> # tar -g backuplist -xvf [압축해제할 파일명] * 백업리스트 파일을 참조하며(g옵션), 해당 파일 압축 해제
압축 해제 과정과 해제 후 파일 현황
cron+백업 과제
crontab -e
명령어에서 특정 시간 반복 명령어 입력cron.sh
파일에서 실행할 명령어 입력- 1에서 설정한 특정 시간동안 파일 생성
- 3에서 실시한 백업파일이 제대로 생성되었는지 확인
- 어느정도 백업 파일이 쌓였다면 압축 해제로 과정 확인
과제내용 1
- 1)
![]()
crontab -e
명령어 입력- 2)
![]()
cron.sh
파일 입력 내용- 6)
압축 해제로 과정 확인
- 하드코딩 느낌으로
crontab -e
의 명령어와cron.sh
파일을 1:1 매칭시켜주는 식으로 구현과제내용 2
그렇다면
cron.sh
파일을 여러개 만들어주는 것이 아닌 생성 파일 이름에 명령어 실행 시간을 넣는게 가능하다면?
![]()
# touch /home/data/test_$(date +'%Y%m%d')
명령어를 이용하여 해당 날짜를 파일 이름에 추가시켜줄 수 있다.그렇다면 연월일+시분초까지 추가해줄수 있을까?
![]()
# touch /home/data/test_$(date +'%Y%m%d%H%M%S')
명령어로 날짜+시간까지 추가해주었지만 날짜와 시간의 구별이 어렵다.# touch /home/data/test_$(date +'%Y%m%d_%H%M%S')
명령어에선%Y%m%d
과%H%M%S
사이에_
를 넣어줌으로써 가시성을 높임.그렇다면 연월일+시분초의 가시성을 높여주자
![]()
# touch /home/data/test_incre_$(date +'%Y-%m-%d_%H:%M:%S')
마지막으로 cron.sh 파일에 적용해보자
crontab -e
에서
매 1분마다cron1.sh
를 실행![]()
cron1.sh
에 파일 이름을
Incre_$(date +'%Y-%m-%d_%H:%M:%S').tar
로 설정매 분마다
연월일+시분초
가 이름에 붙어서 생성된다.