7.31 정리-스케줄링

HakJin Kim·2023년 7월 31일
0
post-thumbnail

스케줄링

  1. 주기적인 스케줄링
    = cron
    = 설정한 시간에 스케줄링 실행

  2. 일시적인 스케줄링
    = anacron, at
    = 한 번 실행 후 스케줄링 삭제

cron

명령어

<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 디렉터리에 옮기기

백업

  • 종류
    데이터백업 / 시스템백업
  1. 일반 백업(풀 백업)
    -> 아카이브 비트(0=백업받음, 1=백업안받음) 변동 X(0으로 되어야 백업을 받음)
  2. 증분 백업
    -> 아카이브 비트 변동 O
    ex) 월요일의 변동분, 화요일의 변동분, 수요일의 변동분,.....,일요일의 변동분, Full 백업
  3. 차등 백업
    -> 아카이브 비트 변동 X
    ex) 월요일의 변동분, 화요일 변동분+월요일의 변동분, 수요일의 변동분+화,월요일의 변동분,......,일~월요일의 변동분, Full 백업

백업 실습

  • 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+백업 과제

  1. crontab -e 명령어에서 특정 시간 반복 명령어 입력
  2. cron.sh 파일에서 실행할 명령어 입력
  3. 1에서 설정한 특정 시간동안 파일 생성
  4. 3에서 실시한 백업파일이 제대로 생성되었는지 확인
  5. 어느정도 백업 파일이 쌓였다면 압축 해제로 과정 확인

과제내용 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로 설정
  • 매 분마다 연월일+시분초가 이름에 붙어서 생성된다.
profile
처음 시작하는 사람

0개의 댓글

관련 채용 정보