Linux

如果它被殺死,如何自動重新啟動我的java程序?

  • January 10, 2018

我在 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

引用自:https://unix.stackexchange.com/questions/179388