01 01 * * * /usr/java/j2sdk1.3.1_02/bin/java -Dfile.encoding=8859_1 -classpath /usr/local/sms/sender sms.SMSmanager

위 내용이 입력한 crontab 내용이다. (매일 새벽 1시 1분에 자바크래스를 실행한다)

시스템상에 path랑 claspath를 잡아 뒀더래도 crontab에서는 인식하지 않는다..
그래서 java명령에 PATH를 포함하였고 -classpath 옵션을 주었다.

또한 팀으로 -Dfile.encoding= 옵션으로 인코딩을 지정해줘야 한다. 크론탭으로 실행될때는 한글이 깨지는 상황이 발생하기 때문.

crontab -l : cron정의 내용리스트보기
crontab -e : vi로 cron 정의내용 수정하기
crontab -r : cron 삭제하기

분(0-59)시(0-23)일(1-31)월(1-12)일(0-7) 


출처 - http://javagomtang.tistory.com/archive/200811http://www.okjsp.pe.kr/seq/31301


===================================================================================


Cron으로 자바프로그램 수행하기
 
1. 자바 프로그램 예제
 
  다음과 같이 현재 시간을 출력하는 자바 프로그램을 Cron을 이용하여 주기적으로 수행 되도록하겠습니다.
 

 

  import java.util.*;
 
  public class CurrentTime
  {
    static public void main(String[] args)
    {
       System.out.println("Current Time is " + new Date());
    }
  }
 

 

 

2. 컴파일
  예제 자바 프로그램을 컴파일 합니다.
 

 

 $> javac CurrentTime.java

 

 
 
3. crontab 파일 작성
  등록된 스크립트나 프로그램은 Cron 데몬에 의하여 수행되므로 결과를 출력할 수 없습니다. 이번 예제에서는 실행 시 출력을 /root/cron.log 파일로 저장하도록 합니다.
아래 예제는 매초마다 수행하도록 설정하였습니다. crontab 구문은 크게 스케줄링 필들들과 명령행으로 구성됩니다.
 
  java 실행 문 앞의 "* * * * *" 스케줄을 나타냅니다. 앞에서 부터 분,시,일,월,요일에 대한 스케줄을 나타냅니다.
 

 각 필드는 공백으로 구분됩니다. 스케줄링 필드들에서 *는 매분, 매시, 매일,... 등의 의미입니다. 설정하는 값은 ","를 이용하여 여러개를 입력할 수 있습니다.

 

 필드

 대상

설정 가능한 값

필드1

0 - 59, *

   

필드2

0 - 23, *

필드3

1 - 12, *

필드4

1 - 31, *

필드5

요일

0 - 6 (0=sunday), *

 

예제)

 

  5 * * * *    : 5초에 수행합니다.
  0 1 1 * *    : 매달 1일 1시 정각에 수행합니다.
  5,10,15 * * * * : 매월 매일 매시 5분, 10분 15분에 수행합니다.
  0 1,15 * 1  : 매달의 월요일들뿐만 아니라 1일과 15일에 수행합니다.
  30 6 * * 1,3,5 : 매달 월요일, 수요일, 금요일 오전 6시 30분에 수행합니다.

 

 

$> vi crontab.cron
* * * * * /usr/local/java/bin/java -classpath "/root" CurrentTime > /root/cron.log
 

 

  등록된 스크립트 및 프로그램은 등록한 사용자의 사용자 HOME 디렉터리에서 실행되지만 ".profile"을 수행하지않습니다. 따라서 사용자가 ".profile"에 정의한 PATH, CLASSPATH등이 환경변수에 적용되지않으므로 java 실행 파일 경로를 Full-Path로 하였습니다.  또다른 방법은 쉘 스크립트로 만들고 이 스크립트에서 ".profile" 로드하거나 직접 쉘 스크립트에서 환경 변수를 명령을 문 이전에 설정해도 됩니다. 
 

 

$> vi crontab.cron

 * * * * * currenttime.sh > /root/cron.log
  
$> vi currenttime.sh
 
PATH=$PATH:/usr/local/java/bin; export PATH    
CLASSPATH=$CLASSPATH:/root; export CLASSPATH 
java CurrentTime > /root/cron.log
 

 

or
 

 
$> vi currenttime.sh
 
. .profile
java CurrentTime > /root/cron.log
 
$> chmod 777 currenttime.sh
 

 

4. crontab 파일 등록
 

 

$> crontab crontab.cron

 

 

 
5. crontab 등록확인
 

 

$> crontab -l
    # DO NOT EDIT THIS FILE - edit the master and reinstall.
    # (crontab.cron installed on Thu Dec  9 14:23:43 2004)
    # (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
    * * * * * /usr/local/java/bin/java -classpath "/root"

                                 CurrentTime> /root/cron.log

 

   

6. crontab 실행 결과 확인
 

 

   $> vi /root/cron.log
   Current Time is Thu Dec 09 14:38:00 KST 2004
 



===================================================================================

안녕하세요 이번에 자바로 소켓데몬을 하나만들었는데요.

 

유닉스에서 크론텝에 등록시켜서 사용할라고 하는데 자바가 실행이 안되고..

 

sh파일을 바로 기동시키면 돌아가고. 크론텝에 등록된건 안되고해서 현재 손수 기동시켜주고있습니다.;;

 

0,5,10,15,20,25,30,35,40,45,50,55 * * * * /ktfinterface/ktfpps3g/script/act3gboot.sh

 

크론텝 안에 내용이구요..

 

sh파일 내용은..

 

#!/bin/ksh
#--------------------------------------
# 사용자 LIB PATH 설정
# System LIB PATH 설정
LIB_CLASS=/oracle/app/oracle/product/10.2.0/jdbc/lib/classes12.jar
MAIN_PGM=/ktfinterface/ktfpps3g/bin/ib3ginf_deploy.jar

#**************************************
# 사용되는 LIB LINK 설정
LINK_CLASS=$LIB_CLASS:$MAIN_PGM
#--------------------------------------
MPGMNM=rms3gact
RUNPGM=act.rms3gact
#--------------------------------------

####################### rms3gact ##########################
check=`ps -ef|grep "svc.startd" | grep -v grep |awk !/grep/`
#
check=`ps -ef|grep "rms3gact" | grep -v grep | wc -w`
if [ $check == 0 ];then
  echo '---'
  echo '------------------------------------------------'
  echo '|                                              |'
  echo '|       rms3gact 기동(RMS)                     |'
  echo '|                                              |'
  echo '------------------------------------------------'
  java -D$MPGMNM -classpath $LINK_CLASS $RUNPGM $MPGMNM &

  echo ' 기동 완료 '
fi
echo 'endend'
#==============================================================

 

요로콤 해놨습니다.   여기저기 검색해보니 자바는 환경을 따로잡아야된다고해서 여러가지  시도를 해봤는데.

 

몬하는건지 안되는건지 ㅜ.ㅜ

 

그럼  많은 지식 부탁드리겠습니다.

 

// =======================================================================

#!/bin/sh

 

# PATH 설정
PATH=.:(경로)/jdk1.5.0_05/bin/:$PATH
export PATH

 

# CLASSPATH 설정
CLASSPATH=.:(경로)/jdk1.5.0_05/lib/tools.jar:
export CLASSPATH

 

# 실행파일 Directory 이동
cd (경로)/bin

 

# 현재날짜
DATE=`date '+%Y%m%d'`

 

# 프로그램 실행

java XXXXX >> (경로)/log/$DATE.log

 

// =======================================================================

 

위에 까지가 현재 제가 사용하고 있는 crontab 에 등록하여 java를 실행시키는 쉘 명령어 입니다.

 

위에 처럼 자바의 환경을 잡아 준뒤에 실행해 보시면 정상적으로 작동을 할 것 입니다.

 

제가 사용하는 서버는 솔라리스와 HP 서버 두군데를 사용하고 있는데 정상적으로

 

crontab에서 실행하고 있습니다.

 

 

===================================================================================

 

수동으로 실행하면되고 크론탭에서 안되는 근본 이유는 아마도

수동으로 실행하시는 계정의 .profile에 설정된 각종 환경변수 셋팅이 crontab으로 실행시에는 없기 때문입니다

따라서 crontab에서 실행하는 /ktfinterface/ktfpps3g/script/act3gboot.sh 파일 상단에

 

#!/bin/ksh

계정홈디렉토리/.profile

 

추가하시면 crontab에서도 실행될겁니다







'Development > Java' 카테고리의 다른 글

java - 현재 시간 확인  (0) 2012.07.18
java - java.lang.NullPointerException 에러  (1) 2012.05.24
java - ORM  (0) 2012.05.15
JNDI(Java Naming and Directory Interface)  (0) 2012.05.10
java - thread example  (0) 2012.05.05
Posted by linuxism
,