Cron Daemon 만들기 - Cron Daemon mandeulgi

crond데몬을 이용하여 시스템에서 주기적이고 반복적인 작업을 예약해 두고서 원하는 시간에 자동실행하도록 설정을 할수 있다.

, cron은 시스템 예약작업을 일컫는것이다.

-. crond데몬 실행 및 중지

>크론데몬실행

[root@os1 ~]# service crond start

Starting crond:                                            [  OK  ]

[root@os1 ~]# /etc/rc.d/init.d/crond start

Starting crond:                                            [  OK  ]

위 둘다 결과는 같다 다만 service를 이용하느냐 아니면 스크립트파일을 직접 접근하느냐의 차이다.

>크론데몬중지

[root@os1 ~]# service crond stop

Stopping crond:                                            [  OK  ]

[root@os1 ~]# /etc/rc.d/init.d/crond stop

Stopping crond:                                            [  OK  ]

-. 크론데몬 실행중인지 확인하기

[root@os1 ~]# ps -ef | grep cron

root     15120     1  0 02:02 ?        00:00:00 crond

>> root를 위한 cron파일 <<

/etc/crontab파일은 root사용자를 위한 시스템예약작업파일이다.

파일의 내용을 보면 아래와 같이 이미 정해져있는 예약작업이 존재한다.

[root@os1 ~]# cat /etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

# run-parts

01 * * * * root run-parts /etc/cron.hourly

02 4 * * * root run-parts /etc/cron.daily

22 4 * * 0 root run-parts /etc/cron.weekly

42 4 1 * * root run-parts /etc/cron.monthly

위 내용을 보면

01 * * * * root run-parts /etc/cron.hourly

매시 01분에 /etc/cron.hourly디렉토리내에 스크립트를 실행한다.

02 4 * * * root run-parts /etc/cron.daily

매일 0402분에 /etc/cron.daily디렉토리내에 있는 스크립을 실행한다.

22 4 * * 0 root run-parts /etc/cron.weekly

매주 일요일 04 22분에 /etc/cron.weekly디렉토리내에 있는 스크립트를 실행한다.

42 4 1 * * root run-parts /etc/cron.monthly

매월 104 42분에 /etc/cron.monthly디렉토리내에 있는 스크립트를 실행한다.

, 매시,매일,매주,매월 작업은 이미 디렉토리로 생성되어 root사용자는 해당 디렉토리에 스크립트파일을 생성후 집어넣기만 하면 된다. #퍼미션에 실행권한이 있어야만 실행됨

또한 라인을 추가하여 특정 날짜 혹은 특정시간을 지정하여 시스템예약작업을 추가할수도 있다.

사용된 행을 간단하게 해석하면 아래와 같다.

각 필드별로 구분하여 설명하겠다.

22 : 22

4 : 4

* : 매일

* : 매월

0 : 일요일

root: root계정으로

run-parts /etc/cron.weekly : /etc/cron.weekly디렉토리내에 있는 모든 실행파일을 실행한다.

, 22 4 * * 0 root run-parts /etc/cron.weekly이 내용은

매주 일요일 04 22분마다 /etc/cron.weekly디렉토리내에 있는 실행파일을 root사용자의 권한으로 실행시킨다는 의미이다.

#크론파일의 각 필드에 대해선 아래에서 설명하겠다.

>> 일반사용자를 위한 cron파일 <<

/etc/crontab파일은 root사용자만을 위한 시스템예약설정파일이다.

하지만 일반사용자들도 cron작업을 할수 있다.

일반사용자의 크론설정파일은 /var/spool/cron/디렉토리내에 사용자의 계정명으로 된 파일에 저장되며,

crontab명령어를 이용하여 수정 및 확인이 가능하다.

물론 root계정도 생성이 가능하다 root계정도 일종의 사용자가 이기 때문이다.

root사용자는 시스템예약작업을 /etc/crontab파일에 기록하던, /var/spool/cron/root파일에 기록하던 자기 마음이라고 하겠다.

-. 사용자예약작업 추가하기

사용자 시스템예약작업을 추가하는 작업은 /var/spool/cron/[계정명]파일에 시스템예약작업을 추가하는것이다.

크론작업을 설정하고자 하는 계정으로 로그인후 crontab -e명령어를 사용하면 해당사용자의 크론설정파일이 vi편집기모드로 열리게 된다. 여기에 예약작업을 설정후 저장을 하게 되면

해당사용자의 예약작업이 추가된다.

아래는 youngjae계정으로 시스템예약작업을 설정한 예이다.

[youngjae@os1 ~]$ crontab -l

no crontab for youngjae #youngjae의 크론파일없음

[youngjae@os1 ~]$ crontab -e #youngjae계정의 크론파일생성

25 * * * * /bin/touch /home/youngjae/crontest

#wq로 저장후 종료

[youngjae@os1 ~]$ date

Sun Jan 27 03:25:10 KST 2013

[youngjae@os1 ~]$ ll | grep crontest

-rw-rw-r-- 1 youngjae youngjae    0 Jan 27 03:25 crontest

, 현재 사용자의 크론설정내용을 확인하려면 crontab -l명령어로 가능하고,

크론설정내용을 추가하거나 변경하고싶을때는 crontab -e명령어를 이용하면 된다.

-. 사용자예약작업 삭제하기

crontab -r명령어를 이용하면 현재 사용자의 cron설정파일이 제거된다.

, 현재사용자에 설정된 예약작업이 모두 사라진다는것이다.

[youngjae@os1 ~]$ crontab -l

25 * * * * /bin/touch /home/youngjae/crontest

[youngjae@os1 ~]$ crontab -r

[youngjae@os1 ~]$ crontab -l

no crontab for youngjae

crontab -r 명령어 이후 crontab -l 확인하니 파일이 없어진걸 알수 있다.

-. root사용자가 사용자크론설정 확인 또는 삭제하기

crontab -u [계정명] 옵션

>root사용자가 youngjae사용자의 크론설정파일 편집하기

crontab -u youngjae -e

>root사용자가 youngjae사용자의 크론설정파일 확인하기

crontab -u youngjae -l

>root사용자가 youngjae사용자의 크론설정파일 삭제하기

crontab -u youngjae -r

또는 /var/spool/cron/디렉토리내에 파일을 cat명령어로 확인해도 crontab명령어로 -l옵션으로 확인하는것과 같다.

#크론파일의 각 필드에 대해선 아래에서 설명하겠다.

>> 사용자크론설정 사용허가 또는 제한하기 <<

사용자크론설정을 허용하거나 제한하는 파일은 /etc/디렉토리에는 cron.allow파일과 cron.deny파일로 존재한다.

리눅스 초기설정에는 이 두파일이 존재하지 않기 때문에 root만이 crontab명령어를 사용할수 있다.

, 사용자크론설정은 crontab명령어를 이용하여 크론설정 및 제거 또는 확인을 할수 있는데,

위 파일은 사용자의 crontab명령어의 사용을 막는것이지 크론설정자체를 막는것이 아니다.

따라서 root사용자가 임의로 특정사용자에게 cron설정을 해두고 cron.deny파일에 해당 사용자명을 넣어두면 해당사용자의 크론작업은 주기적으로 이루어지지만 사용자는 자기 크론설정파일을 보거나 설정할수가 없다.

cron.allow파일이나 cron.deny파일을 사용하는 방법은 각 행의 사용자계정명만 넣어주면 된다.

[root@os1 ~]# cat /etc/cron.allow

root

youngjae

-. crontab명령어의 옵션

-l :현재 설정된 크론설정보기

-e :크론설정 편집하기

-r :크론파일 삭제하기

-. crontab명령어 사용허가파일(cron.allow)

/etc/cron.allow파일에 특정 사용자의 계정명을 넣어두면 해당 사용자는 사용자크론을 사용할수 있다.

-. crontab명령어 사용제한파일(cron.deny)

/etc/cron.deny파일에 특정 사용자의 계정명을 넣어두면 해당 사용자는 사용자크론을 사용할수 없다.

-. cron.allow파일과 cron.deny파일에 대한 비교

>내용없는 cron.allow파일만 존재할경우

root crontab 사용가능

사용자 crontab 사용불가

>내용없는 cron.deny파일만 존재할경우

root crontab 사용가능

사용자 crontab 사용가능

>내용없는 cron.allow, cron.deny두파일이 모두 존재하는경우

root crontab 사용가능

사용자 crontab 사용불가

>cron.allow파일과 cron.deny두파일에 모두 계정명이 들어있는경우

root crontab 사용가능

사용자 crontab 사용가능

모든사용자에 대한 crontab명령어를 제한하고 특정 사용자에 대해서만 crontab명령어를 허용하고싶을때는

cron.allow파일만 생성후 허용하고자 하는 사용자계정명을 넣어두면 된다.

모든사용자에 대한 crontab명령어를 허용하고 특정 사용자에 대해서만 crontab명령어를 제한하고 싶을때는

cron.deny파일만 생성후 제한하고자 하는 사용자계정명을 넣어두면 된다.

#cron.deny파일만 생성후 root를 넣어봤지만 root계정에서 crontab명령어는 사용이 됐다.

>> 크론설정파일의 각 행의 필드들 <<

01 * * * * root run-parts /etc/cron.hourly

위는 크론파일에 설정되어있는 예약작업을 의미하는 행이다.

각 행은 총 6개의 필드로 구분이 되며, 각 필드에 대한 의미는 아래와 같다.

필드

설명

첫번째 필드

""(minute)을 의미, 0 ~ 59분까지 설정가능

두번째 필드

""(hour)를 의미 0 ~ 23시까지 설정가능

세번째 필드

""(day)을 의미 1 ~ 31일까지 설정가능

네번째 필드

""(month)을 의미 1 ~ 12월까지 설정가능

다섯번째 필드

"요일"(weekday)을 의미 0~7까지 설정가능

0=, 1=, 2=, 3=, 4=, 5=, 6=, 7=

여섯번째 필드

실행될 명령어 내용

주의사항1, '*' 문자

각 필드에는 "*"문자가 올수 있으며, 이는 각 필드에 해당하는 모든 숫자를 의미한다.

예를 들어 첫번째 필드인 일(day)필드자리에 "*"이 설정되었다면 설정된 명령어가 매일 실행된다는 의미이다.

, 첫번째 필드부터 다섯번째 필드까지 모두 "*"문자로 채워져있다면 매일 매시 매분마다 해당 명령어가 실행된다.

주의사항2, '-' 문자

각 필드자리에 "-"문자가 올수 있다. 예를 들어 일(day)필드자리에 "11-15"로 설정되어 있다면 11,12,13,14,15일을 의미한다.

시간(hour)필드자리에 "1-5"로 설정되었다면 1,2,3,4,5시를 의미한다.

주의사항3, ',' 문자

각 필드자리에 ","문자가 올수 있다. 예를 들어 요일(weekday)필드자리에 "1,3,5"로 설정되었다면 매주 월,,금요일을 의미한다.

※ 크론설정에 대한 설명은 끝이 났다.

당연한 소리겠지만 크론설정, 즉 예약작업은 crond라는 데몬에 의해 실행이 되므로 crond데몬이 중지상태라면 설정은 무의미하다.

만약 시스템예약작업을 설정해놓은 상태라면 crond데몬이 동작중인지 확인을 해야할것이다.

또한 시스템예약작업에 사용되는 쉘프로그래밍은 방법이 무궁무진하므로 따로 보다 심도있게 공부를 해야할것이다.

참조 : 리눅스 서버관리 실무 바이블 3.0(박성수 저)