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.
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
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
Veja também daemontools (não o software de montagem de CD virtual): link