2021년 3월 29일 월요일

Java로 무한 loop 쉘스크립트 실행

 java에서 쉘스크립트를 실행하는 기능을 추가 했다.

문제는 자바 프로그램이 종료되면 쉘스크립트 역시 1~2초 후에 멈춰 버린다.

쉘스크립트는 while true로 무한루프로 실행이 되는 스크립트였다.


자바에서 실행 명렁어를 nohup, &, sh -c 등 이것 저것 다 해 보았지만 쉘스크립트는 멈췄다.

결국 찾은 방법은 두가지이다. 두가지 방법 다 정석적인 해결책은 아니고 trick으로 볼수 있는 방법이다.


하나는 중간 launch 스크립트를 두는 방식이다.

실제 내가 실행해야 할 스크립트가 target.sh 이면 launcher.sh를 둬서 자바에서는 launcher.sh를 실행하는 방법이다.

launcher.sh에는 아래와 같은 명령을 넣는다.


#/bin/sh

nohup ./target.sh 1> /dev/null 2>&1 &



다른 하나는 trap을 사용한 방법이다. 

trap 명령어는 특정 시그널이 들어올 때 어떤 일을 할 지 적용할 수 있다.


실제 적용한 방법은 두번째 방법으로 trap명령어를 통한 방법이다.

적용 방법은 아래와 같다.


trap "method_name" 0


0은 EXIT 인 경우 이다. 자바 프로세스 종료시 EXIT 시그널이 오는 데, 그 때 loop를 사용하는 method_name를 다시 한번 사용하게 하였다.

종료는 9(SIGKILL) 시그널을 발생시켜서 종료하므로 문제 없이 stop을 할 수 있다.

댓글 없음:

댓글 쓰기