Java 프로그램이 종료된 경우 자동으로 다시 시작하려면 어떻게 해야 합니까?

Java 프로그램이 종료된 경우 자동으로 다시 시작하려면 어떻게 해야 합니까?

아래와 같이 Linux 시스템(machineA)에서 실행 가능한 jar를 실행하고 있습니다. 15분마다 이메일을 보내는 실행 가능한 Jar에 Java 프로그램이 있습니다.

/usr/lib/jvm/java-1.7.0-openjdk-amd64/bin/java -jar abc.jar config.properties &

위와 같은 작업을 시작하면 abc.jar백그라운드에서 실행되고 15분마다 계속 이메일을 보내는 클래스가 있습니다. 내 Java 프로그램에서 Scheduler를 사용하고 있는데, 이는 15분마다 깨어나서 나에게 이메일을 보내는 스레드입니다.

이제 모든 것이 잘 작동합니다. machineA어떤 이유로 다시 시작되거나 어떤 이유로 종료된다고 가정하면 백그라운드에서 자동으로 다시 시작할 abc.jar수 있는 방법을 찾고 있습니다 .abc.jar

그래서 저는 Ubuntu 12.04를 실행하고 있기 때문에 Ubunutu의 시작 기능을 사용하기로 결정했습니다. 여기 구성 파일이 있습니다.

#/etc/init/testlnp.conf

#sudo start testlnp
#sudo stop testlnp

start on runlevel [2345]
stop on runlevel [016]

chdir /export/home/david/tester
respawn

post-stop script
  sleep 30
end script

limit nofile 8092 8092
setuid david
exec /usr/lib/jvm/java-1.7.0-openjdk-amd64/bin/java -jar abc.jar config.properties &

abc.jar파일은 이 디렉토리에 있습니다 /export/home/david/tester. 이제 다음과 같이 Java 프로그램을 시작했습니다.

sudo start testlnp

모든 일이 순조롭게 시작됐고, ps aux | grep java간파 할 수 있었어요-

david@machineA:~$ ps aux | grep java
david 130691 38.5  0.0 33906208 58636 ?      Sl   19:24   0:01 /usr/lib/jvm/java-1.7.0-openjdk-amd64/bin/java -jar abc.jar config.properties
david   131029  0.0  0.0   8100   936 pts/2    S+   19:24   0:00 grep --color=auto java

이제 얼마 후 ps aux | grep java다시 이 작업을 수행하여 이 결과를 보았습니다. 이는 abc.jar내 프로그램의 인스턴스가 여러 개 있다는 뜻입니까? 이런 일이 왜 일어나는지 이해할 수 없나요?

david@slc4b03c-8ixd:~$ ps aux | grep java
david   1746  4.5  0.0 33906208 57808 ?      Sl   19:25   0:01 /usr/lib/jvm/java-1.7.0-openjdk-amd64/bin/java -jar abc.jar config.properties
david   2143 73.0  0.0 33906208 57992 ?      Sl   19:25   0:01 /usr/lib/jvm/java-1.7.0-openjdk-amd64/bin/java -jar abc.jar config.properties
david     2180  0.0  0.0   8100   936 pts/2    S+   19:25   0:00 grep --color=auto java
david 130691  2.5  0.0 33906208 57492 ?      Sl   19:24   0:01 /usr/lib/jvm/java-1.7.0-openjdk-amd64/bin/java -jar abc.jar config.properties

내 주요 목표는 내 컴퓨터가 재부팅되거나 어떤 이유로 abc.jar이 종료된 경우 abc.jar을 다시 시작하는 것입니다. 어떻게 이를 달성할 수 있나요? 내가 신생 기업에 뭔가 잘못한 걸까요?

고쳐 쓰다:-

이것이 제가 받은 PPID입니다.

david@machineA:~$ ps aux | grep java
david  18454  4.5  0.0 33906208 57520 ?      Sl   20:01   0:01 /usr/lib/jvm/java-1.7.0-openjdk-amd64/bin/java -jar abc.jar config.properties
david  18692 27.3  0.0 33906208 57788 ?      Sl   20:01   0:01 /usr/lib/jvm/java-1.7.0-openjdk-amd64/bin/java -jar abc.jar config.properties
david    18779  0.0  0.0   8096   940 pts/2    S+   20:02   0:00 grep --color=auto java


david@machineA:~$ ps  xao pid,ppid,pgid,sid,comm | grep java
 18454      1  18453  18453 java
 18692      1  18691  18691 java

답변1

. &​앰퍼샌드 없이 exec 라인만 있으면 됩니다.

답변2

crontab -e을 클릭한 후 다음 항목을 추가하세요.

* * * * * a=`ps aux | grep abc.jar | grep -v grep | wc -l`; test $a -eq 0 && java -j /path/to/abc.jar

답변3

daemontools(가상 CD 마운트 소프트웨어 아님)도 참조하세요.https://cr.yp.to/daemontools.html

관련 정보