본문 바로가기

Server Oriented/Java & JSP

일정 주기로 실행되는 .java 를 크론탭에 등록



실행되는 .java 에는 public static void main(String[] args) 메소드가 정의되어야 합니다.
다른 package 의 class 메소드를 실행하려면 main 메소드 안에 해당 코드를 등록합니다.
package com.sn.app;
public class DelayedAppMng {

 public static void main(String[] args) throws Exception {

  AppInfo  info  = new AppInfo();
  info.setCnt1(-6);
  info.setCnt2(2);
  
  AppMng  appMng = new AppMng();
  appMng.doDelayedAppsNotify(info);
 }
}


그런데, DB 를 작업하는 등 다른 외부 라이브러리를 사용할 때도 있지요.
이럴 때는 .sh 쉘 안에 관련 코드를 넣어 주고, 크론탭은 이 .sh 쉘을 실행합니다.
# /.../doDelayedAppsNotify.sh
export CLASSPATH=.:$CLASSPATH
export CLASSPATH=/.../servlet.jar:$CLASSPATH
export CLASSPATH=/.../commons-logging-1.1.jar:$CLASSPATH
export CLASSPATH=/.../classes:$CLASSPATH
/.../java -cp $CLASSPATH com...DelayedAppMng


.sh 파일은 실행할 수 있어야 합니다.
chmod a+x /.../doDelayedAppsNotify.sh
a 는 모든 사용자, u 는 owner, g 는 동일 group, o 는 other
x 는 실행 속성.


크론탭은 실행되어야 하는 .java 의 소유권자 또는 동일 그룹의 사용자 기준으로 작성하는 것이 바람직합니다.
crontab -e 를 실행하고 필요한 내용을 입력한 다음 <Esc> 키를 눌러서 명령 실행창으로 전환,
'wq' 를 입력하여 <Enter> 를 통해 저장하면 아래와 같이 자동으로 실행됩니다.
crontab: installing new crontab
등록된 크론탭의 내용을 보려면, crontab -l 을 실행합니다.


자, 크론탭에는 아래와 같은 방식으로 입력합니다.
마지막 로그 기록이 남도록 하면 좋습니다.
0 5 * * * /.../doDelayedAppsNotify.sh > /.../doDelayedAppsNotify.log
상기와 같은 경우 매일 05:00 에 해당 코드가 실행됩니다.
첫번째 m : minute 분을 입력하는 자리
두번째 h : hour 시간을 입력하는 자리
세번째 dom : day of month "몇일"을 입력하는 자리
네번째 mon : month "몇월"을 입력하는 자리
다섯번째 dow : day of week 요일을 입력하는 자리
여섯번째 command : 명령어를 입력하는 자리
첫번째에서, "0,30" 과 같이 하면 00 분과 30 분 2차례에 걸쳐 실행된다는 겁니다.
'*' 는 아무 값이나 허용된다는 뜻입니다.

http://kin.naver.com/open100/detail.nhn?d1id=1&dirId=10302&docId=198876&qb=Y3JvbnRhYiDsmLXshZg=&enc=utf8&section=kin&rank=9&search_sort=0&spq=0