개인/리눅스

[리눅스] 프로세스 스케줄링 (at,crontab)

OmeGa2 2020. 2. 10. 18:44

프로세스 스케줄링이란

리눅스에서는 특정한 시간에 어떤 작업을 수행하기 위해 스케줄링이라는 기능을 사용한다. 

스케줄링에는 at 과 cron 두 가지가 있으며 모두 데몬이 실행중이어야 한다.

at 스케줄링은 주로 프로그램을 특정시간에 한 번만 사용하고 싶을 때 이용한다.

cron 스케줄링은 프로그램을 특정 날짜나 시간, 요일에 맞춰 주기적으로 사용하고 싶을 때 이용한다.

 

 

at 스케줄링의 사용

]# at [옵션] [시간]

-c : 작업정보 출력

-d : 예약한 작업을 삭제(=atrm)

-l : 큐에 있는 작업 출력(=atq)

-f : 파일을 지정해서작업을 읽어온다.

 

▷ 시간지정 = HHMM , HH:MM (am,pm 구분가능)

▷ 날짜지정 = MMDDYY, MM/DD/YY, MM.DD.YY

 (today, now, tomorrow 문자열 사용 가능)

at 스케줄링은 원하는 작업을 지정된 시간에 한 번 수행하기 위해 사용한다.

ard 데몬에 의해 실행되며 지정한 작업은 큐(queue)와 /var/spool/at 디렉터리에 저장된다.

 

표준입력장치(키보드)를 통해 순차적으로 명령을 입력한 후 [Ctrl]+[d]를 누르면 작업이 예약된다.

이후 결과는 root 사용자의메일로 전송된다.

 

시간 지정은 HHMM / HH:MM 형태로 사용하고 am,pm으로 구분한다.

(am,pm 구분이 없을 경우 24시 기준)

 

 

1. at 스케줄링 만들기

 

at [시간] [날짜]

at [시간] [날짜] 형식으로 만든 스케줄링 파일이다.

먼저 "hi customer" 문자를 출력하는파일 하나를 생성한 뒤 at스케줄링을 실행한다.

(시간은 24시 기준이나 am,pm 원하는대로 설정할 수 있다.)

 

at 명령어 실행시 "at>" 프롬프트가 출력되며 원하는 작업을 순차적으로 입력한다.

이후 [Ctrl]+[d] 단출키를 사용하면 정상적으로 스케줄링이 등록된다.

 

정상적으로 스케줄링이 등록되면 작업내역과 저장되는 위치가 나타난다.

(/var/spool/mail/root 에 저장)

 

 

2. 등록한 at스케줄링 확인

 

저장된 at스케줄링을 확인하는 방법으로는 두 가지가 있다.

 

at -l 명령을 통해서는 큐(queue)에 저장된 작업의 목록을 보여준다.

또한 작업내용은 /var/spool/at 디렉토리에 저장된 파일을 통해 확인할 수 있다.

(/var/spool/at 내부 파일은 at -c [작업번호] 명령을 통해 확인가능)

 

 

3. at 스케줄링 사용자제한 

 

at 스케줄링은 at.deny / at.allow 두 개의 파일을 통해 사용자를 제한할 수 있다.

현재는 at.allow 파일이 없는 상황이라서 at.deny파일만 사용해보았다.

 

at.deny 파일에 등록된 사용자는 at를 사용할 수 없게 된다.

(사용자를 등록하는 방법은 한줄에 한 계정씩 적으면 된다.)

 

만약 /etc/allow 파일이 존재하는 경우 해당파일에 등록된 사용자만 at를 사용할 수 있게 된다.

 

 

 

cron 스케줄링의 사용

]# crontab [옵션] [파일명]

-l : 설정된 스케줄링 출력

-e : vi편집기를 이용한 스케줄링 설정

-r : 저장된 스케줄링 삭제

-u : 다른 사용자의 스케줄링 수정

cron을 이용한 스케줄링은 시스템운영에 필요한 작업과, 사용자에게 필요한 작업 두 가지로 나뉜다.

시스템 운영에 필요한 작업은 root 권한으로 /etc/crontab 에 등록해서 수행할 수 있다.

사용자가 필요에 의해 지정하는 작업은 crontab 명령어를 통해 등록할 수 있다.

 

/etc/crontab

cron 의 주기적인 스케줄링은 /etc/crontab 파일의 내용을 참조해서 사용된다.

 

crontab 파일은 총 7개 필드로 나뉘며 설정하는 방법은아래와 같다.

minute = 분 설정 (0~59)

hour = 시간 설정 (0~23)

day of month = 한달을 기준 (1~31)로 설정

month = 월단우 설정 (1~12)

day of week = 요일설정 (0~7), 0과 7은 일요일, 1은 월요일

user-name = 사용자 설정, 일반적으로 생략한다.

command = 사용할 명령어 설정

 

1. 사용자의 crontab 등록하기

 

각 사용자의 스케줄링 파일은 crontab -e 명령을 통해 등록할 수 있다.

crontab -l 명령을 통해 등록된 스케줄링 파일을 확인할 수 있다.

(이는 시스템 스케줄링인 /etc/crontab 파일의 내용과는 관련없다.)

 

"*" 문자는 all을 의미한다. 등록된 crontab 을 확인했을 때 시간/날짜/요일 모두 *로 표기되어있다.

따라서 매분, 매달, 매일 "hi.sh"파일을 실행해서 log파일안에 출력하는 crotab이라는 뜻이다.

 

hi.sh 파일은 "hi customer" 문자를 출력하는 내용이 들어있다.

즉, log 파일에는 "hi customer" 문자가 출력된다.

 

 

2. 스케줄링 주기 설정방법

 

각각의 필드는 설정값에 따라 시간, 월, 일단위로 쪼개서 스케줄링을 설정할 수 있다.

10,20,30 * * * * = 매시간 10분, 20분, 30분에 실행

0-30 10 * * *    = 매일 10시 0분 ~ 30분까지 매분 실행

* * 1 1-12/2 *   = 1~12월까지 2개월마다 1일날 매분 실행

10 * * * 1,3,5    = 월,수,금요일마다 매시간 10분에 실행

각 필드는 공백으로 구분되며 쉼표(,) 와 *(all) 를 이용해 스케줄을 조정한다.

이외에 두 값의 사이 모든 값을 의미하는 "-" 등 여러 기호를 사용해서 설정할 수 있다. 

 

 

3. cron 스케줄링 사용자 제한

 

cron도 at과 마찬가지로 cron.allow / cron.deny 두 개의 파일로 사용자를 제한한다.

 

allow 파일이 없을 경우 cron.deny 파일에 등록된 사용자는 cron을 사용할 수 없다.

만약 /etc/allow 파일이 있다면 해당 파일에 등록된 사용자만 cron을 사용할 수 있다.