Thursday, April 5, 2018

CentOS 6.6 리눅스 기초] 16. at과 cron을 이용한 명령 스케줄링


안녕하세요. 썬구루입니다. 이번에는 명령 스케줄링에 대해 알아보도록 하겠습니다. 그냥 예약 작업으로 보면 될 것 같습니다. 여러분들이 특정 프로그램을 지정한 시간에 돌려야 한다면 어떻게 해야 할까요? 그 시간까지 기다렸다가 수동으로 실행시킬 수 있지만 새벽 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