[완료] java를 crontab실행시 jdbc로딩문제

cutecat의 이미지

오라클 jdbc를 연결해서 값을가져오는 java프로그램을 만들었습니다.
그냥 java실행하면 잘되는데요..
crontab 실행을 위해 sh파일을 만들어서 sh를 실행시키니깐
Class.forName("oracle.jdbc.driver.OracleDriver") 이거에 걸려서 안되요 ㅜㅜ

어떻게 해야 되는지 제발 알려주시면 정말정말 감사하겠습니다.

===test.sh====(classpath모두 잡아주었습니다.)
#!/usr/local/bin/bash
JAVA_HOME=/usr/local/java1.3
export JAVA_HOME
TOMCAT_HOME=/usr/local/jakarta_project/jakarta-tomcat-3.2.1
export TOMCAT_HOME
export JACARTA_HOME=/usr/local/jakarta_project
export STRUTS_HOME=$JACARTA_HOME/jakarta-struts-1.0-b1
export CLASSPATH=$CLASSPATH:$JACARTA_HOME/jakarta-tomcat-3.2.1/lib/ant.jar:
...... classpath 이하 중략......
/usr/local/java1.3/bin/java -cp /usr/local/jakarta_project/SOURCE/ICBS_SRC/Work/order/mail_send_log/Mail_schedule.jar Mail_schedule

========== Mail_schedule.java
public class Mail_schedule
{
private String mail_id;
private String send_gubun;

public Mail_schedule(String mail_id, String send_gubun){
this.mail_id = mail_id;
this.send_gubun = send_gubun;
}

public void All_send() {
try
{
........ 이하 중략 .........
} catch (SQLException e){
e.printStackTrace();
}catch ( Exception e ) {
}
}

// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 선택고객발송
public void each_send() {
try {
......... 이하 중략 .........
} catch (SQLException e){
e.printStackTrace();
}catch ( Exception e ) {
}
}
public static void main (String[] argv)
{
try {
String sqlQuery = " select * from mail_send_log where appoint_date = to_date(sysdate,'YY-mm-dd') and is_send=0 ";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String strUrl = "jdbc:oracle:thin:@1.1.1.1:1521:ELIM";

//Oracle JDBC Driver Load
System.out.println("JDBC Driver Load 이전 ");
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("JDBC Driver Load 이후 ");

conn = DriverManager.getConnection( strUrl , "userid" , "pass" );
stmt = conn.createStatement();
rs = stmt.executeQuery( sqlQuery );

while(rs.next()) {
String mail_id = rs.getString("mail_id");
String send_gubun =rs.getString("send_gubun");

if(rs.getString("serviceid_value") == null|| rs.getString("serviceid_value").equals("")) {

Mail_schedule th = new Mail_schedule(mail_id,send_gubun);
th.All_send ();
}else {
Mail_schedule th = new Mail_schedule(mail_id,send_gubun);
th.each_send ();
}
}//while(rs.next

} catch (SQLException e){
e.printStackTrace();
}catch ( Exception e ) {
}
}
}
================== test.sh 실행시 결과======
JDBC Driver Load 이전
===================================

kwon37xi의 이미지

오라클 JDBC 드라이버가 들어있는 jar 파일를 CLASS_PATH에 잡아주셨나요?? 그것만 해주면 해결 될 것 같네요.

그리고 Exception을 캐치해놓고서 아무것도 안하는 부분이 있는데요..
그거 매우 안좋은 습관입니다.
아예 catch를 하지말고 위로 넘기든지, log로 남기는 처리를 하든지 해야합니다.
그래서 Exception이 화면에 찍히기라도 해야 원인이 뭔지 파악을 할 수 있겠죠?

이 소스는 Exception을 먹어버리기 때문에 저 결과만 봐서는 원인을 알 수가 없어요..

그리고 저 같은 경우에는 Java로 작성된 싸이트를 관리하는데요, 개발은 물론 Java로 하지만, 관리는 Python으로 하고있습니다.
정말 편하더군요.
script 만들어서 바로바로 테스트하고, 배포하고.

가능하시다면 Python/Ruby/Perl 같은 스크립트 언어 배우셔서 관리하는거 추천합니다.

cutecat의 이미지

classpath를 잡아주었습니다. 아래처럼..
그런데도...여전히 똑같아요ㅜㅜ
export CLASSPATH=$CLASSPATH:/usr/local/java1.3/lib/classes12.jar:
export CLASSPATH=$CLASSPATH:$/usr/local/jakarta_project/jakarta-tomcat-3.2.1/lib/classes12.jar:

kwon37xi의 이미지

앞서 말씀드렸다싶이.
Exception을 찍어보세요.
그래야 왜 오류가 발생하는지 정확히 알수 있지요. Exception만 찍어보면 스스로 해결하실 수 있을겁닙다.

http://kwon37xi.egloos.com

cutecat의 이미지

에러내용이..
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

jdbc 드라이버를 찾지를 못하네요..
classpath에 잡아줬는데두...왜 못잡는지...

kwon37xi의 이미지

/usr/local/java1.3/bin/java -cp $CLASSPATH:/usr/local/jakarta_project/SOURCE/ICBS_SRC/Work/order/mail_send_log/Mail_schedule.jar Mail_schedule

cutecat의 이미지

jdbc 클래스는 이제 제대로 찾아요..
sh 실행시 java프로그램이 잘 실행되는데요..
crontab에 등록시켰을때는
Mail_schedule.java의 rs = stmt.executeQuery( sqlQuery ); 이 실행이 되지 않는것 같아요..
while(rs.next()) 안에것들이 실행이 안되요..ㅜㅜ

cutecat의 이미지

쿼리가 시스템 시간에 맞는 데이터를 가져오는거였는데
crontab에서 돌리니깐 이 시스템시간의 값이 안됐었네요..
이 구문을빼고 하니깐 되네요...감사합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.