DS's『 행복합시다 』

Carpe Programming/server

crontab

nolite 2012. 2. 2. 13:48
반응형

수정 : crontab -e 계정
조회 : crontab -l 계정

#매 분 마다 돌리기
분, 시간, 일, 월, 요일, 명령
예) * * * * * /data2/batch/run/ttz_cron.sh > /dev/null 2>&1

ttz_cron.sh 내용

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

#!/bin/ksh
#
telnet eai.beak.co.kr 8080 << +
GET /jsp/TT/TTZ_STJBCron.jsp HTTP/1.0



/*****************************************************************************************************************/



명령어 [형식]

# crontab [-u user] file
# crontab [ -u user ] [ -i ] { -e | -l | -r }

명령어 [설정]

cron 실행 확인

# ps -ef |grep cron

crontab 실행 :

# /etc/init.d/cron start

crontab 종료 :

# /etc/init.d/cron stop

crontab 재시작 :

# /etc/init.d/cron restart

크론 설정 :

# /etc/crontab

일반 사용자에게 crontab 명령어 사용하도록 설정 허가

# /etc/cron.allow 여기에 ID 등록

일반 사용자의 crontab 명령어 사용을 제한

# /etc/cron.deny 에 ID를 등록

명령어 [옵션]

-e : 스케쥴 수정(edit)

-l : 현재 cron에 등록되어 있는 것을 출력(list)

-r : 등록된 스케줄 제거 (remove)

명령어 [시간]

기본구조 : [분] [시] [일] [월] [요일] [command]

- 분 : 0 ~ 59

- 시 : 0 ~ 23

- 일 : 1 ~ 31

- 월 : 1 ~ 12

- 주 : 0 ~ 6 (0 : 일요일)

- command : 실행할 명령어나 스크립트

- command를 제외한 모든 필드에 와일드 카드 문자(*)를 사용할 수 있고, field에 - 기호를 사용해서 범위를 지정

명령어 [사용법]

예제 A) 매주 금요일 01시 10분에 rdate를 사용하여 시간동기화를 한뒤 date 명령어로 시간확인하고 time.txt 에 기록한다.

# crontab -e

vi 편집모드로 전환

10 1 * * 5 rdate -s time.bora.net && date >> time.txt

예제 B) cron에 저장 되어있는 리스트 보기

# crontab -l

발생하는 사항

1. crontab -l 이나 -e 옵션시 vi 편집모드로 전환이 안될 경우입니다.

* 환경 변수 설정을 해주면 됩니다.

# export EDITOR=vi

또는 /etc/profile에 export EDITOR=vi 를 추가하면 매번 등록하는 번거로움을 줄여줍니다.






/*****************************************************************************************************************/




기본 Cron 사용방법

1.crontab 명령어를 이용해서 입력

#crontab -e

19 * * * * echo "<--------------- this line added ---------------->" >> /cron.txt

======= 설명 =======================

19분정각, 매시간, 매일, 매월, 매주, 명령

2.디렉토리를 이용한 스크립트 파일실행형시

#crontab -e

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

#vi /etc/cron.hourly/cron_run

echo "test added....." >> /cron.txt

#chmod 755 cron_run

----------------------- 잘만들어진 설명도 있네요 --------------------------

최종 수정일 : 2001년 8월 3일
글쓴이 : 윤 일(admin@rootman.org)

HOW-TO using cron

안녕하세요. 루트맨 운영자입니다. 이번 강좌는 너무나도 유용한 cron에 대해서 얘기할려고 합니다.
cron은 윈도우 시스템의 작업 스케줄러와 비슷한 기능을 하는 명령입니다. 보통 정기적으로 백업 파일을 만들 때 많이 사용합니다. 루트맨의 경우 정기적으로 아파치의 로그를 지워주고 홈페이지 파일을 백업해 줄 때 사용하고 있습니다.

cron 파일이 저장되는 장소
/var/spool/cron/사용자명 ( "/var/spool/cron/crontab/사용자명" 으로 되어 있을 수도 있다)

cron을 사용할 땐 crontab 이라는 명령을 이용해서 설정한다.
crontab의 형식은 다음과 같다.

분(minute) 시(hour) 날(day) 달(month) 요일(dayofweek) 명령(command)
***각항은 space로 구분됩니다***

우선 한가지 예를 보면서 이해합시다.. 뭐니 뭐니 해도 예제를 보고 따라하면 금방 익힐 수 있어요
일단 crontab을 설정하기 위해선 다음과 같이 명령합니다.

#crontab -e

위와 같이 입력하면 vi 편집기가 열릴겁니다..
기본적으로 crontab의 편집기는 vi로 지정되어 있습니다.

/var/spool/cron에 가보면 사용자 이름으로 cron 파일이 있을 것이다.

위의 내용은 일요일 12시마다 /usr/local/apache/htdocs의 내용을 backup.tar라는 파일로 백업을 하라는 것입니다.
앞의 0은 분(minute)을 가리키고 12는 시(hour) 세번째 *는 날(day) 네 번째 *는 달(month)를 지정해 준겁니다..
*는 all을 의미합니다. 그러니까 매일, 매달 일요일 12시에 명령을 실행하라는 얘기지요...
분(minute), 시(hour), 요일(dayofweek)도 마찬가지로 *를 적용할 수 있습니다.
기억해 둘건 날짜와 관련된 항은 5개라는 것...

또 tar 라는 명령외에 다름 명령도 추가 해주고 싶을 땐 ";" 로 구분해서 ";" 뒤에 명령을 더 달아 주면 됩니다.
아파치의 로그 기록파일을 매주 월요일 1시에 지워주고 아파치를 restart 시키는 crontab을 만들어 보겠습니다.
위와 마찬가지로 crontab -e를 명령해서 cron 설정 vi 화면으로 넘어 갑니다.

무슨 메시지가 뜨죠... cron 어쩌고 저쩌고... 그럼 제대로 설정된 겁니다.

crontab -r ----> crontab에 설정된 것을 삭제해 주고 싶을 때(모두 삭제 됩니다)
crontab -l ----> 현재 설정되어 있는 crontab을 보고 싶을 때


1일부터 15일 까지로 날짜를 지정하고 싶을 땐 다음과 같이 하이픈을 이용할 수 있다.
0 1 1-15 * * [명령]
분, 시, 날, 달, 요일, 모두 적용할 수 있다.

1일과 7일 15일에 cron을 작동시킬 땐 콤마를 이용하면 된다.
0 1 1,7,15 * * [명령]
분, 시, 날, 달, 요일, 모두 적용할 수 있다.

매 5일 마다 실행하고 싶을 땐 슬래쉬(/)를 이용한면 된다.
0 1 /5 * * [명령]
분, 시, 날, 달, 요일, 모두 적용할 수 있다.
/ 안해줘도 달이 *로 표현되어 있어서 매달 실행된다. 하지만 좋은 습관을 들이기 위해..

cron 강좌는 여기서 끝 더 궁금한점이 있으면 게시판에 올려주세요

crontab 명령

목적

cron 작업을 제출, 편집, 나열 또는 제거합니다.

구문

crontab [ -e | -l | -r | -v | File ]

설명

crontab 명령은 cron 작업을 제출, 편집, 나열 또는 제거합니다. cron 작업은 cron 디먼이 정기적으로 계획된 간격으로 수행하는 명령입니다. cron 작업을 제출하려면, crontab 명령을 -e 플래그와 함께 지정하십시오. crontab 명령은 편집 세션을 호출하여 crontab 파일을 작성할 수 있게 합니다. 이 파일에 각 cron 작업에 대한 항목을 작성합니다. 각 항목은 cron 디먼에 맞는 양식이어야 합니다. 항목 작성에 대한 내용은 crontab 파일 항목 형식을 .

사용자가 항목 작성을 마치고 파일을 종료할 때, crontab 명령이 그것을 /var/spool/cron/crontabs 디렉토리에 복사한 후, 사용자의 현재 사용자 이름에 대해 명명된 파일에 배치합니다. 사용자 이름을 갖는 파일이 crontabs 디렉토리에 이미 존재하는 경우, crontab 명령은 기존 파일위에 겹쳐씁니다.

다른 방법으로, File 매개변수를 지정하여 crontab 파일을 작성할 수 있습니다. 파일이 존재할 경우, 그 파일은 cron 디먼이 예상하는 형식이어야 합니다. 파일이 없을 경우, crontab 명령이 편집기를 호출합니다. EDITOR 환경 변수가 있을 경우, 명령은 지정하는 편집기를 호출합니다. 그 외에는 crontab 명령이 vi 편집기를 사용합니다.

crontab 파일의 내용을 나열하려면, crontab 명령에 -l 명령을 지정하십시오. 기존 파일을 제거하려면, -r 플래그를 사용하십시오.

cron 디먼

cron 디먼은 crontab 파일 항목에 따라 명령을 수행합니다. 사용자가 cron 작업의 출력을 표준 출력 또는 오류로 재지정하지 않는 한, cron 디먼은 사용자에게 모든 명령 출력 또는 오류를 메일로 전송합니다. crontab 파일에서 cron 작업을 잘못 지정하면, cron 디먼은 작업을 수행하지 않습니다.

cron 디먼은 cron 디먼이 초기설정될 때만 crontab 파일을 시험합니다. crontab 명령을 사용하여 crontab 파일에 변경을 수행할 때, 변경을 나타내는 메세지가 cron 디먼으로 전송됩니다. 이것으로 새로운 또는 변경된 파일에 대해 정기적으로 계획된 간격으로 오버헤드를 점검하지 않아도 됩니다.

crontab 명령 사용에 대한 제어

/var/adm/cron/cron.allow/var/adm/cron/cron.deny 파일은 crontab 명령을 사용할 수 있는 사용자를 제어합니다. 루트 사용자는 이 파일을 작성, 편집 또는 삭제할 수 있습니다. 이 파일의 항목은 한 행에 이름이 한 개 있는 사용자 로그인 이름입니다. 사용자의 로그인 ID가 둘 이상의 로그인 이름과 연관되는 경우, crontab 명령은 사용자가 실제로 사용 중인 로그인 이름과 상관없이 /etc/passwd 파일에 있는 첫번째 로그인 이름을 사용합니다.

다음은 cron.allow 파일의 한 예입니다.

root
nick
dee
sarah

cron.allow 파일이 있을 경우, 로그인 이름이 여기에 나타나는 사용자들만이 crontab 명령을 사용할 수 있습니다. 루트 사용자의 로그 이름이 cron.allow 파일에 반드시 나타나야 합니다. 시스템 관리자는 사용자의 로그인 이름을 cron.deny 파일에 나열하여 그 사용자가 crontab 명령을 사용할 수 없게 할 수 있습니다. cron.deny 파일만이 존재하는 경우, 파일에 나타나지 않는 모든 사용자가 crontab 명령을 사용할 수 있습니다.

다음 중 하나에 해당되는 경우, crontab 명령을 사용할 수 없습니다.

  • cron.allow 파일과 cron.deny 파일이 존재하지 않습니다(루트 사용자만 허용).
  • cron.allow 파일이 존재하지만 사용자의 로그인 이름이 나열되어 있지 않습니다.
  • cron.deny 파일이 존재하고 사용자의 로그인 이름이 나열되어 있습니다.

cron.allowcron.deny 파일이 둘다 존재하지 않는 경우, 루트 사용자 권한을 갖는 사람만이 crontab 명령으로 작업을 제출할 수 있습니다.

crontab 파일 항목 형식

crontab 파일은 각 cron에 대한 항목을 포함합니다. 항목들은 개행 문자로 분리됩니다. 각 crontab 파일 항목은 다음 형태로 공백이나 탭으로 분리된 6개 필드를 포함하고 있습니다.

 
minute(분)  hour(시)  day_of_month(일)  month(월)  weekday(요일)  command(명령)

이들 필드는 다음 값을 승인합니다.

minute(분) 0 - 59
hour(시) 0 - 23
day_of_month(일) 1 - 31
month(월) 1 - 12
weekday(요일) 일요일부터 금요일까지를 나타내는 0 - 6
command(명령) 쉘 명령

각 필드에 대해 반드시 값을 지정해야 합니다. command 필드를 제외하고, 필드 다음에 들어갈 수 있습니다.

  • 지정된 범위에 있는 숫자. 5월에 명령을 수행하려면, 필드에 5를 지정하십시오.
  • 두 수를 대시로 분리하여 두 수 자체도 포함하는 범위를 나타내는 범위 지정. 화요일부터 금요일까지 cron 작업을 수행하려면, weekday 필드에 2-5를 입력하십시오.
  • 숫자들을 쉼표로 분리하여 나열한 숫자 리스트. 1월의 첫날과 마지막 날에 명령을 수행하려면, 필드에 1,31을 입력합니다.
  • *(별표)는 모든 허용되는 값을 의미합니다. 매 시간마다 작업을 수행하려면, hour(시) 필드에 별표를 지정하십시오.
주: 앞에 역슬래시(% 포함)가 오는 모든 문자는 문자 그대로 처리됩니다. 날짜의 지정은 두 필드(날짜와 요일)에 의해 이루어질 수 있습니다. 둘다를 요소로 지정할 경우, 둘다 고수하십시오. 예를 들어 다음과 같이 입력합니다.
0 0 1,15 * 1 command

이 명령은 모든 월요일뿐만 아니라 각 달의 1일과 15일에 command를 수행합니다. 단 하나의 필드로 날짜를 지정하려면, 다른 필드는 *를 포함해야 합니다.

명령 지정

cron 디먼은 선택된 날짜와 시간의 여섯 번째 필드에 지정된 명령을 수행합니다. 여섯 번째 필드에 %(퍼센트 기호)를 포함하면, cron 디먼은 그 앞에 오는 모든 것을 명령 호출로서 취급하고, 퍼센트 기호(\%)를 탈출하지 않는 한 그 뒤에 오는 모든 것을 표준 입력에 사용 가능하게 만듭니다. 공백 행과 첫번째 비공백 문자가 번호 기호(#)인 행을 무시됩니다.

주: 쉘은 명령 필드의 첫번째 행만을 수행합니다. 모든 다른 행은 명령에 표준 입력으로 사용 가능하게 됩니다.

cron 디먼은 사용자의 HOME 디렉토리에서 서브쉘을 시작합니다. 사용자가 로그인되지 않았을 때 수행하도록 명령을 계획하고 사용자의 .profile 파일에 있는 명령을 수행하려면, 명령은 반드시 명시적으로 사용자의 .profile 파일을 읽어야 합니다.

cron 디먼은 모든 쉘에 대해 HOME, LOGNAME, SHELL(=/usr/bin/sh) 및 PATH(=/usr/bin)를 정의하는 디폴트 환경을 제공합니다.

플래그

-e 사용자의 crontab 파일의 사본을 편집하거나 또는 아직 crontab 파일이 없으면 편집 세션을 시작합니다. 편집이 완료될 때, 항목이 사용자의 crontab 파일로서 설치됩니다. 편집 세션은 EDITOR 환경 변수에 의해 지정되는 편집기를 사용하여 시작됩니다. 디폴트 편집기는 vi입니다.
-l crontab 파일을 나열합니다.
-r crontab 디렉토리에서 사용자 crontab 파일을 제거합니다.
-v cron 작업의 상태를 나열합니다.

보안

감사(audit) 이벤트: 감사(auditing) 서브시스템이 적절하게 구성설정되고 사용 가능한 경우, crontab 명령은 명령이 실행될 때마다 다음 감사 레코드(이벤트)를 생성합니다.

이벤트 정보
CRON_JobRemove cron 작업을 제거한 사용자와 시기를 나열합니다.
CRON_JobAdd cron 작업을 추가한 사용자와 시기를 나열합니다.

감사 이벤트 선택 및 그룹화하는 방법과 감사 이벤트 데이타 수집 구성설정 방법에 대한 자세한 내용은 AIX Version 4.3 System Management Guide: Operating System and Devices에 있는 "감사 기능 설정"을 참조하십시오.

종료 상태

이 명령은 다음과 같은 종료값으로 복귀합니다.

0 성공적으로 완료되었습니다.
>0 오류가 발생하였습니다.

예제

  1. mycronjobs이라는 파일을 /var/admn/cron/crontabs 디렉토리에 복사하려면, 다음과 같이 입력하십시오.
    crontab mycronjobs
  2. 매 시간마다 콘솔에 시간을 기록하려면, 다음과 같이 입력하십시오.
    0 * * * * echo The hour is `date` .
    >/dev/console
  3. 모든 월요일, 수요일 및 금요일 오전 6시 30분에 calendar 명령을 수행하려면, 다음과 같이 입력하십시오.
    30 6 * * 1,3,5 /usr/bin/calendar
  4. 일년 내내 매일 6시 30분에 calendar 명령을 수행하려면, 다음과 같이 입력하십시오.
    30 6 * * * /usr/bin/calendar
  5. 8월 동안 매일 자정에 maintenance라는 스크립트를 수행하려면, 다음과 같이 입력하십시오.
    0 0 * 8 * /u/harry/bin/maintenance
  6. 명령에 대한 표준 입력에 대해 텍스트를 정의하려면, 다음과 같이 입력하십시오.
    0 16 * 12 5 /usr/sbin/wall%HAPPY HOLIDAY!%Remember to 
    turn in your time card.
    %(퍼센트 기호) 뒤에 오는 텍스트가 다음과 같이 wall 명령에 대한 표준 입력을 정의합니다.
    HAPPY HOLIDAY!
     
    Remember to turn in your time card.

파일

/var/adm/cron/FIFO crontab 또는 at 명령으로 새 작업이 제출될 때 cron 디먼으로 메세지를 전송하는 명명된 파이프.
/var/spool/cron/crontabs crontab 스풀 영역을 지정합니다.
/var/adm/cron/cron.allow crontab 명령에 대한 액세스가 허용되는 사용자 리스트를 지정합니다.
/var/adm/cron/cron.deny crontab 명령에 대한 액세스가 거부되는 사용자 리스트를 지정합니다.
728x90
반응형

'Carpe Programming > server' 카테고리의 다른 글

[sha256] 암호화  (0) 2013.08.28
[svn] window에서 설치 및 운영  (0) 2013.07.04
[IIS] asp upload 용량 설정  (0) 2013.06.21
[IIS] 사용자 error page 설정  (0) 2013.06.20
[jeus] webtob 설치 및 jeus 연동  (0) 2012.09.06