본문 바로가기
모의해킹 침해대응 과정/Liunx 관리

리눅스 잡 스케줄링 / day 12

by 알거음슴 2021. 4. 14.

잡 스케줄링 : 정기적인 작업을 수행하는 경우. (ex 스케줄링)

스케줄링 관련 CMD

 at CMD : 특정한 시간대에 한번 작업수행후 사라짐.

 crontab CMD : 반복적인 작업을 수행하는 경우.

 

1. at

지정된 시간에 어떤 작업이 실행될 수 있도록 예약처리 하는 기능. atd 데몬으로써 작동됨으로 기동되고 있어야 한다.

* systemctl status atd.service 로 동작 여부 확인.
 

 형식

at [OPTIONS] [TIME] 

 

주요 활용 포멧.

 작업 선언

# at 1300 : 13:00 실행

# at 10:00pm today : 오늘 PM10시 실행

# at now +1 mins : 현재로부터 1분뒤에 실행

 작업 확인

# at -l

# atq

 작업 취소

# at -r N (N: job ID)

# atrm N (N : Job ID)

 

[실습] at 선언 및 선언결과, 선언삭제를 해보자

 

 

2. crontab

주기마다 반복되는 작업을 실행할 때 사용되는 스케줄 관련 CMD 역시나 crond 라는 데몬이 실행중이여야 기동되는 서비스이다

 * system status crond.service 로 동작여부 확인.

 

형식

   crontab [OPIONS] [FILENAME]

주요 사용 포멧

 작업 선언

# crontab -e  : 작업을 선언/추가한다 (vi /var/spool/cron/ 와 동일 )

# crontab -e -u user01 : 해당 유저에게 작업을 추가.

 

 작업 확인

# crontab -l : 작업 리스트를 본다  (cat /var/spool/cron/<사용자이름> 와 동일)

 

 작업 삭제

# crontab -r : 작업을 삭제 한다 ( rm /var/spool/cron/<사용자이름> 와 동일)

 * 모든 작업이 일괄적으로 삭제됨으로. 일부 수정을 희망한다면 crontab -e 를 통해서 수정하는 방식으로 진행한다.

 

 1) crontab 을 활용한 스케줄링

crontab -e 의 작성구조

 *      *     *      *      *      [CMD]

(분)  (시)  (일)  (월)  (요일)  [CMD]

 

crontab 파일은 5개의 시간 필드(////요일)한개의 명령어 필드(명령어/스크립트)로 구성되어 있다.

각 필드는 공백문자(White Space)를 통해 구분이 된다.

 (분) 자리에는 0~ 59분까지 올수 있다.

 (시) 자리에는 0~ 23시까지 올수 있다.

 (일) 자리에는 1~ 31일까지 올수 있다.

 (월) 자리에는 1~ 12월까지 올수 있다.

 (요일) 자리에는 0부터 ~ 7까지 올수 있다. 0,7: 일요일, 1: 월요일, 2: 화요일, 3: 수요일, 4: 목요일

 

* 각 필드에 들어갈 수 있는 값

 0 : 0때 실행

 1,2,3 : 1,2,3 때 실행

 1-3 : 1~3 떄 실행

 * : 매(분,시..)번 실행

 */5 : 전체를 5로 나눠서 실행. (ex> 60/5 떄 실행)

 

[참고] 주요 활용 포맷 (/root/bin/backup.sh 을 실행)

분 시 일 월 요일 CMD 

--------------------------------------------

0 3 * * * /root/bin/backup.sh                (하루에 한번씩)

0 0,12 * * * /root/bin/backup.sh            (하루에 두번씩)

0 3 * * 0 /root/bin/backup.sh               (일주일에 한번씩)

0 3 * * 1,3 /root/bin/backup.sh             (일주일에 두번씩)

0 3 1 * * /root/bin/backup.sh               (한달에 한번씩)

0 3 1,15 * * /root/bin/backup.sh            (한달에 두번씩)

0 3 1 3,6,9,12 * /root/bin/backup.sh       (분기에 한번씩)

--------------------------------------------

0 3 1 * 0 /root/bin/backup.sh                (매달 13시 정각 and 매주 일요일)

--------------------------------------------

 

[실습] crontab 을 활용하여 다양한 스케줄링 파일을 만들어보자.

 

[참고] crontab 의 사용자를 제한해보자.

/etc/cron.{deny,allow} 

cron.deny 파일만 존재하면, cron.deny 파일에 존재하는 사용자는 crontab 명령어를 수행할 수 없고, cron.deny 파일에 존재하지 않는 모든 사용자는 crontab 명령어를 수행할 수 있다.

cron.allow 파일이 존재하면, cron.allow 파일에 존재하는 사용자만 crontab 명령어를 수행할 수 있다. cron.allow 파일이존재하면, cron.deny 파일은 보지 않는다.

 

[root@server1 ~]# vi /etc/cron.deny 

user01

[root@server1 ~]# su - user01
[user01@server1 ~]$ crontab -e
You (user01) are not allowed to use this program (crontab)
See crontab(1) for more information
[user01@server1 ~]$ 

 

 * cron.deny 에 등록되더라도 cron.allow 에 등록되면 이용가능. 단 cron.allow 파일이 존재하는 순간부터는. 해당 파일내 등록된 사용자만 이용가능. (root 는 제외)