以下に示すように、実行可能なjarをLinuxマシン(machineA)で実行しています。実行可能なJarには、15分ごとに電子メールを送信するJavaプログラムがあります。
/usr/lib/jvm/Java-1.7.0-openjdk-AMD64/bin/Java -jar abc.jar config.properties &
上記のようにabc.jar
を開始するとすぐに、バックグラウンドで実行され、15分ごとにメールを送信し続けるクラスがあります。 Javaプログラムでスケジューラを使用しています。このプログラムは、15分ごとに起動し、メールを送信するスレッドです。
これで、すべてが正常に機能しています。 machineA
が何らかの理由で再起動された、またはabc.jar
が何らかの理由で強制終了されたとすると、abc.jar
がバックグラウンドで自動的に再開される方法を探しています。
そこで、Ubuntu 12.04を実行しているので、Ubunutuでupstart機能を使用することにしました-そしてこれが私の設定ファイルです-
#/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を再起動することです。どうすればこれを達成できますか? upstartで何か問題がありますか?
更新:-
これは私が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
&
を取り除きます。これにより、バックグラウンドに分岐し、Upstartはプロセスが終了したと見なし、新しいプロセスを生成します。アンパサンドなしのexec行があります。
crontab -e
、次の項目を追加します
* * * * * a=`ps aux | grep abc.jar | grep -v grep | wc -l`; test $a -eq 0 && Java -j /path/to/abc.jar
デーモンツール(仮想CDマウントソフトウェアではない)も参照してください: https://cr.yp.to/daemontools.html