以下のように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