centos 7 // jdk1.8
1. CentOs7 에 설치된 JDK 버전확인
1.1 #java -version
위에 캡쳐는 jdk가 정상적으로 설치되었을때 이고 설치가 되어있지 않다면
자신의 CentOs버전과 비트에 맞는 JDK를 다운로드 받은후 설치하면된다.
2. 설치항목
2.1
GNU AutoConf (at least version 2.53)
An ANSI-C compliant compiler (GCC is good)
GNU Make
A Java Platform 2 compliant SDK
(다른항목들은 자동으로 설치되어있었는데 AutoConf가 설치가 되어있지않아 #yum install autoconf 로 해결)
2.2
commons-daemon-1.0.5.jar
commons-daemon-1.0.5-src.tar.gz
위에 2개항목은 다운받아서 옮기거나 직접다운로드하여도된다.
#mkdir /root/daemonTest 생성후 #cd /root/daemonTest 로이동
#wget http://archive.apache.org/dist/commons/daemon/binaries/commons-daemon-1.0.5.jar
#wget http://archive.apache.org/dist/commons/daemon/source/commons-daemon-1.0.5-src.tar.gz
다운로드 완료후 #tar zxvf commons-daemon-1.0.5-src.tar.gz 로 압축해제
3. 설정 및 실행
3.1
2.2 에서 압축해제까지 한후 #cd commons-daemon-1.0.5-src/src/native/unix 로 이동후
support/buildconf.sh 입력
support까지 들어간후 ./buildconf.sh 을 하게되면 configure.in 파일을 찾을수없다는 메시지가 나온다.
3.2
jsvs 생성하기전 /root/daemonTest/commons-daemon-1.0.5-src/src/native/unix 디렉토리내 목록
unix 디렉토리에서 #./configure --with-java=/usr/java/jdk1.8/ (/usr/java/jdk1.8/ 내 JDK가 설치된 경로)
#make
#mv jsvc /root/daemonTest
4. JAVA 파일
package com.daemon.test;
import org.apache.commons.daemon.Daemon;
import org.apache.commons.daemon.DaemonContext;
import org.apache.commons.daemon.DaemonInitException;
public class daemonTest implements Daemon, Runnable {
private String status = "";
private int no = 0;
private Thread thread = null;
public void init(DaemonContext context) throws DaemonInitException,
Exception {
System.out.println("init...");
String[] args = context.getArguments();
if (args != null) {
for (String arg : args) {
System.out.println(arg);
}
}
status = "INITED";
this.thread = new Thread(this);
System.out.println("init OK.");
System.out.println();
}
public void start() {
System.out.println("status: " + status);
System.out.println("start...");
status = "STARTED";
this.thread.start();
System.out.println("start OK.");
System.out.println();
}
public void stop() throws Exception {
System.out.println("status: " + status);
System.out.println("stop...");
status = "STOPED";
this.thread.join(10);
System.out.println("stop OK.");
System.out.println();
}
public void destroy() {
System.out.println("status: " + status);
System.out.println("destroy...");
status = "DESTROIED";
System.out.println("destroy OK.");
System.out.println();
}
public void run() {
while (true) {
System.out.println(no);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (no > 1000) {
break;
}
no++;
}
}
}
jar 로 export한후 /root/daemonTest 로 복사
5. shell script 작성
#!/bin/sh
JAVA_HOME=/usr/java/jdk1.8/
JSVC=/root/daemonTest/jsvc
USER=root
DAEMON_HOME=/root/daemonTest
PID_FILE=$DAEMON_HOME/daemon.pid
OUT_FILE=$DAEMON_HOME/daemon.out
#ERR_FILE=$DAEMON_HOME/daemon.err
CLASSPATH=\
$DAEMON_HOME/commons-daemon-1.0.5.jar:\
$DAEMON_HOME/daemonTest.jar
MAIN_CLASS=com.daemon.test.daemonTest
case "$1" in
start)
#
# Start Daemon
#
rm -f $OUT_FILE
$JSVC \
-user $USER \
-java-home $JAVA_HOME \
-pidfile $PID_FILE \
-outfile $OUT_FILE \
-errfile $OUT_FILE \
-cp $CLASSPATH \
$MAIN_CLASS
#
# To get a verbose JVM
#-verbose \
# To get a debug of jsvc.
#-debug \
exit $?
;;
stop)
#
# Stop Daemon
#
$JSVC \
-stop \
-nodetach \
-java-home $JAVA_HOME \
-pidfile $PID_FILE \
-outfile $OUT_FILE \
-errfile $OUT_FILE \
-cp $CLASSPATH \
$MAIN_CLASS
exit $?
;;
*)
echo "[Usage] daemonTest.sh start | stop"
exit 1;;
esac
작성한 파일을 /root/daemonTest 에 복사 후 ./daemonTest.sh 실행
실행전
실행후
daemon.out, daemon.pid 가 추가되었다. daemon.out 에는 로그가 쌓여있고 pid는 쉘을 중지하면 사라진다.
cat daemon.out
6. 기타 오류사항
쉘스크립트를 윈도우에서 작성한 후 linux로 옮겨서 실행을 하였더니 아래와같은 오류메시지가 출력되었다.
/bin/sh^m bad interpreter no such file or directory
해결방법은 http://tod2.tistory.com/28 을보고 해결하였다.
SSISO Community