본문 바로가기
프로그래밍/JAVA

[JAVA] 리눅스에서 자바 프로그램을 데몬으로 실행

by 소나기_레드 2023. 2. 27.

1. JAVA 프로그램을 데몬(deamon) 처럼 실행하고자 할 때 아래와 같이 실행 (뒤에 & 를 붙임)

$ java -jar {runnable.jar} &

 

위의 경우 실행한 유저가 로그아웃하면 프로그램도 같이 종료됨.

 

2. 사용자 로그아웃에 영향받지 않고 시스템에서 백그라운드로 실행하도록 하려면 nohup 명령을 사용하면 된다.

$ nohup java -jar {runnable.jar} &

또는

$ nohup {shellscript 파일} &

 

3. nohup 으로 실행한 파일 종료는 kill 을 사용

$ ps -ef | grep {runnable.jar}

를 활용하여 PID 를 찾은 후

$ kill -9 {PID}

 

4. nohup 을 사용하면 실행위치에 nohup.out 파일이 생성됨. 일종의 로그 파일.

   장시간 프로세스가 실행되면 파일의 용량이 커질수 있으므로 nohup.out 파일을 생성하지 않으려면

 

$ nohup java -jar {runnable.jar} 1 > /dev/null 2> &1 &

 

<참고>  1 은 표준출력, 2는 표준에러

   위 실행명령은 runnable.jar 를 백그라운드 데몬으로 실행하고,

   표준출력은 /dev/null 로 보내고, 표준오류는 표준출력으로 보냄으로써 파일은 생성되지 않는다.

 

5. 데몬으로 구동/중지하는 예

$ vi  run.sh

#프로그램을 데몬으로 실행
nohup java -Du={서비스이름} -jar {runnable.jar} 1>/dev/null 2>&1 &

#프로그램의 PID 저장
echo $!> {서비스이름}.pid

echo "Service Started !!!"

 

$vi stop.sh

echo "WServer Service Stopping...."

#실행시 저장한 PID 로 프로세스 KILL
kill -9 `cat < {서비스이름}.pid`

#PID 저장 파일 삭제
rm -rf wserver.pid

echo "Service Stopped!!"

댓글