crontab -e 를 하게 되면 vi editor 상태로 들어가게 됩니다.

crontab 은 반복적으로 어떤 특정한 시간대에 어떤 작업을 시작하도록 예약할 필요성을 느낄때, 예약기능인 crontab 을 구현하여 저장할 수 있습니다.

crontab 은 다음과 같이

분  시 일 월 연 해당명령으로 구현되어있습니다.
30 16  *   *  *  echo "테스트"

매년 매월 매일 4시 30분에 “테스트”라는 값을 출력하도록 하는 명령어입니다.

이렇게 표준 출력으로 출력이 나오는 명령어는 특정 계정에게 메일로 전송됩니다. 이렇게 메일을 전송하지 않도록 하려면

00 06 * * * echo ‘I bug the system administrator daily at 6:00am!’ >/dev/null

###################################################
# TEST 망 RESTART SHELL SCRIPT
###################################################
20 4 * * 2 /xxx/restart.sh

crontab 안에 java class 를 직접 호출할 수도 있지만, 보통은 이렇게 sh 파일을 불려오는 데 crontab -e 를 사용합니다.

restart.sh 안에는 또다른 sh 파일을 넣어서 처리하도록 할 수 있습니다.

cd /xxx
stop.sh
start.sh

또한, 별도의 java class 를 호출하는 형태도 가능합니다.

#!/bin/ksh
# 통계 배치

BATCH_HOME=/xxx/batch

. ${BATCH_HOME}/SetEnv.sh $*

java test.xxxBatchProcess $1> ${BATCH_HOME}/log/xxxBatchProcess.log.`date +%y%m%d_%H%M%S`

이렇게 실제로 자바를 실행할 수도 있습니다. SetEnv.sh 에는 해당 자바 소스들을 import 합니다.

#!/bin/ksh

export LANG=ko
export PATH=/
export JAVA_HOME=/xxx/weblogic/bea/jdk150_06
export WEBAPP_PATH=/xxx/WEB-INF
export WEBAPP_LIB_PATH=$WEBAPP_PATH/lib
export CLASSPATH=.:$CLASSPATH:$WEBAPP_PATH/classes
export CLASSPATH=.:$CLASSPATH:$WEBAPP_LIB_PATH/commons-beanutils-1.7.0.jar

import 를 안해도 상관은 없지만, 그렇게 하면 java 의 속성값들에 해당 export 값들을 전부 넣어줘서 crontab 에 바로 등록도 가능합니다.

35 04 * * * /usr/local/java/bin/java -Xms516m -Xmx1024m -cp "/home/xxx/public_html/WEB-INF/classes:/home/xxx/public_html/WEB-INF/lib/*" com.adgather.frequency.log.xxx -DeleteBeforeData=Y -CheckAllDate=Y

여러 방법 중에 편한 방법이 가장 좋지만, 맨 앞에, restart.sh 처럼 crontab 에는 sh 파일을 불러오고, shell 에서 java or jar 를 불려와 처리하는 방안이 제일 무난하다고 생각합니다.

가끔 heap 메모리가 부족할 것이 걱정이 된다면, -Xms512m -Xmx2048m 와 같이 메모리 용량을 늘려주는게 좋을 거 같습니다.

#!/bin/ksh
# 통계 배치
BATCH_HOME=/xxx/batch
. ${BATCH_HOME}/SetEnv.sh $*
java -Xms512m -Xmx2048m test.xxxBatchProcess $1> ${BATCH_HOME}/log/xxxBatchProcess.log.`date +%y%m%d_%H%M%S`

이렇게 실제로 자바를 실행할 수도 있습니다.

ps. 위의 예제에서 > 는 해당 출력결과를 특정 log 파일에 저장합니다. 계속 같은 곳에 붙여넣기를 하는 경우도 있기 때문에 계속 날짜를 바꾸기 위한 date를 선언합니다. 만약 » 를 선언하여 계속 덮어 씌우는 것도 가능합니다. 그럴 경우에는 날짜를 바꾸는 date를 제외해야합니다.