Como reiniciar meu programa java automaticamente se ele for morto?

1

Estou executando meu jar runnable na máquina linux (machineA) como mostrado abaixo. No Jar runnable, eu tenho um programa java que envia e-mail para mim a cada 15 minutos.

/usr/lib/jvm/java-1.7.0-openjdk-amd64/bin/java -jar abc.jar config.properties &

Assim que eu começar meu abc.jar , como acima, ele será executado em segundo plano e haverá uma classe que continuará enviando e-mails a cada 15 minutos. Estou usando o Agendador no meu programa java, que é um tópico que acorda a cada 15 minutos e me envia um e-mail.

Agora tudo está funcionando bem. Suponha que machineA tenha sido reiniciado por algum motivo ou que abc.jar tenha sido morto por qualquer motivo, então estou procurando uma maneira para que meu abc.jar seja iniciado novamente em segundo plano automaticamente.

Então eu decidi usar o recurso upstart no Ubunutu enquanto estou executando o Ubuntu 12.04 - E aqui está o meu arquivo de configuração -

#/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 &

Eu tenho meu arquivo abc.jar neste diretório /export/home/david/tester . Agora eu iniciei meu programa java dessa vez -

sudo start testlnp

E começou bem, eu posso ver através de 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

Agora, depois de algum tempo, eu fiz ps aux | grep java novamente e vi assim - o que significa várias instâncias do meu programa abc.jar ? Isto é o que eu não sou capaz de entender por que isso aconteceu?

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

Meu objetivo principal é reiniciar o abc.jar novamente se minha máquina for reiniciada ou abc.jar for morto por qualquer motivo? Como faço para conseguir isso? Há algo de errado que estou fazendo com a novata?

ATUALIZAÇÃO: -

Isso é o que eu recebi por 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
    
por arsenal 16.01.2015 / 03:37

3 respostas

3

Livre-se do & . Isso faz com que seja bifurcado em segundo plano, Upstart acha que o processo morreu e depois gera um novo. Basta ter a linha exec sem oe comercial.

    
por 16.01.2015 / 04:06
1

crontab -e , adicione o item a seguir

* * * * * a='ps aux | grep abc.jar | grep -v grep | wc -l'; test $a -eq 0 && java -j /path/to/abc.jar
    
por 17.03.2015 / 16:12
0

Veja também daemontools (não o software de montagem de CD virtual): link

    
por 10.01.2018 / 20:15