아래와 같이 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