안녕하세요. 썬구루입니다. 이번에는 명령 스케줄링에 대해 알아보도록 하겠습니다. 그냥 예약 작업으로 보면 될 것 같습니다. 여러분들이 특정 프로그램을 지정한 시간에 돌려야 한다면 어떻게 해야 할까요? 그 시간까지 기다렸다가 수동으로 실행시킬 수 있지만 새벽 2시에 실행을 시켜야 하는 것이라면 좀 어렵겠죠.
그래서 그러한 명령은 예약을 통해서 자동으로 지정한 시간에 동작하도록 만들 수 있습니다. 그런데 많은 명령을 실행해야 한다면 어떻게 할까요? 그때는 쉘 스크립트 파일을 만들어 실행하면 되는 것이죠.
그러면 명령을 스케줄링하기 위해 어떠한 명령을 사용할 수 있을까요? at과 cron을 통해 스케줄링을 할 수 있습니다. at 명령은 일회성으로 실행하고 cron은 주기적으로 명령을 실행하도록 만들 수 있습니다.
■ at 명령
일회성으로 명령을 예약 실행하기 위해 사용되는 명령입니다. 예약에 관련된 내용은 /var/spool/at 디렉터리에 파일로 저장된다.
1). 명령 형식
at [옵션] -t 시간
2). 옵션
옵 션
|
내 용
|
-f FILENAME
|
지정한 파일로부터 명령을 받아들인다. |
-l
|
실행 대기 상태로 있는 at 작업을 확인하기 위해 사용한다. atq 명령을 사용하면 동일한 정보를 확인할 수 있다. 결과 내용은 JOB_ID 실행 예정 시간 a 사용자 이름으로 되어 있다. |
-d JOB_ID
|
at 작업을 취소하기 위해 사용한다. atrm 명령을 사용하면 동일한 처리를 할 수 있다. |
-t TIME
|
예약 시간을 명시하기 위해 사용한다. 시간 형식은 [[CC]YY]MMDDhhmm 이다. |
명령을 입력한 후 명령의 끝을 나타내기 위해 Ctrl + D를 입력한다.
3). 예제
-t 옵션 뒤에 월 일 시간 분(MMDDhhmm) 형식으로 예약시간을 설정하였다. 그리고 at -l 명령을 사용하여 예약된 작업을 확인한 후 at 작업 ID를 사용하여 2번 작업을 -d 옵션을 사용하여 취소하였다. 그리고 5분 뒤에 명령이 실행되었는지 확인하기 위해 more 명령을 사용하여 /tmp/data.txt 파일을 확인하였다.
4). at 사용 제한
특정 사용자만 cron을 사용할 수 있도록 제한할 수 있다. 관련된 파일은 아래와 같다.
파 일
|
내 용
|
/etc/at.deny
|
CentOS 6을 설치하면 기본적으로 존재하는 파일이다. at을 사용할 수 없게 사용자 계정 정보를 입력한다. 입력된 계정 외에는 at을 사용할 수 있다. 계정 구분자는 개행(줄 바꾸기) 기호이다. |
/etc/at.allow
|
기본적으로 존재하지 않는 파일이다. at을 사용할 수 있게 사용자 계정 정보를 입력한다. 입력한 계정 외에는 at을 사용할 수 없다. |
■ crontab 명령
주기적으로 명령을 예약 실행하기 위해 사용되는 명령입니다. 예약에 관련된 내용은 /var/spool/cron 디렉터리에 계정 이름과 동일한 이름을 가지는 파일에 저장된다.
1). 명령형식
crontab [옵션]
2). 옵션
옵 션
|
내 용
|
-l
|
예약된 스케줄에 대한 정보를 보기위해 사용한다. |
-e
|
예약 스케줄을 편집하기 위해 사용한다. |
-r
|
예약 스케줄을 삭제하기 위해 사용한다. |
3). 스케줄 형식
crontab -e 명령을 실행하여 예약 스케줄을 편집하려면 특정한 형식에 맞게 설정해야 한다. 한 줄은 하나의 예약을 나타내는데 각 줄은 여섯 개의 필드로 구성되어 있으며 필드의 구분자는 빈칸(Space)이다. 여섯 번째 필드(명령 쪽)는 띄어쓰기가 있어도 그냥 여섯 번째 필드로 간주한다. 각 필드의 의미는 아래 그림과 같다.
필 드
|
내 용
|
① 분
|
분을 나타내며 0~59 숫자가 사용된다. *의 의미는 ...마다(Every) 뜻하다. 0,15,30,45는 매 15분마다의 뜻인데 */15도 같은 의미이다. |
② 시간
|
시간을 나타내며 0~23의 숫자가 사용된다. |
③ 일
|
일을 나타내며 1~31의 숫자가 사용된다. |
④ 월
|
월을 나타내며 1~12의 숫자가 사용된다. |
⑤ 요일
|
요일을 나타내며 0~6의 숫자가 사용된다. 0은 일요일을 나타낸다. |
⑥ 명령
|
예약 실행할 명령을 나타낸다. 한 번에 여러 개의 명령을 실행해야 하는 경우 쉘 스크립트 파일을 만들고 실행 권한을 부여하면 된다. |
*/15 * * * * Command1 : 매 15분마다 Command1을 실행하라
0 */12 * * * * Command1 : 12시간마다 (00:00, 12:00에 실행) Command1을 실행하라
0 23 * * * `1-5 Command1 : 월요일부터 금요일까지 저녁 11시에 Command 1을 실행하라.
0 23 15, 30 * * Command1 : 매월 15일과 30일 저녁 11시에 Command1을 실행하라.
0 23 * * 0,6 Command1 : 매주 토요일과 일요일 저녁 11시에 Command1을 실행하라.
4). 예제
아래는 root 계정으로 터미널 윈도우를 2개 실행하여 위는 crontab 명령을 사용하여 예약된 명령을 확인하고 아래 터미널은 /dev/pts/2 터미널 종류를 사용하는 것을 확인하였다. 그리고 2분마다 시간 정보가 /dev/pts/2로 전달되는 것을 확인할 수 있다. 그리고 -r 옵션을 사용하여 예약되어 있는 작업 내용을 삭제한 것을 확인할 수 있다.
4). cron 사용 제한
특정 사용자만 cron을 사용할 수 있도록 제한할 수 있다. 관련된 파일은 아래와 같다.
파 일
|
내 용
|
/etc/cron.deny
| CentOS 6을 설치하면 기본적으로 존재하는 파일이다. cron을 사용할 수 없게 사용자 계정 정보를 입력한다. 입력된 계정 외에는 cron을 사용할 수 있다. 계정 구분자는 개행(줄 바꾸기) 기호이다. |
/etc/cron.allow
| 기본적으로 존재하지 않는 파일이다. cron을 사용할 수 있게 사용자 계정 정보를 입력한다. 입력한 계정 외 cron을 사용할 수 없다. |
No comments:
Post a Comment