Linux
如果它被殺死,如何自動重新啟動我的java程序?
我在 linux 機器 (machineA) 中執行我的可執行 jar,如下所示。在可執行的 Jar 中,我有一個 java 程序,它每 15 分鐘向我發送一次電子郵件。
/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 中的新貴功能 - 這是我的配置文件 -
#/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
擺脫
&
. 這使它進入後台,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