Desenvolvi uma aplicação em java para linux, que fica mandando pacotes xml periodicamente para um servidor remoto, e escrevendo o status na tela assim que faz um envio de dados.
Gostaria de executar essa aplicação como serviço e iniciasse o mesmo assim que o linux fosse carregado.
Alguém poderia me dar uma luz???
Depende de que distribuição você está usando no Linux. Normalmente você tem de escrever um script e pô-lo em um diretório específico.
Por exemplo, no Debian (e no Ubuntu) você tem de criar um arquivo de script em /etc/init.d.
Um exemplo de como você pode pôr o JBoss como serviço no Debian 4.0 (copie os dados aqui para um arquivo "jboss" no diretório /etc/init.d e dê as permissões adequadas com chmod ugo+x:)
#!/bin/sh# Execucao do jboss como servicoset-e
case"$1"instart)echo"Carregando JBOSS"su-c'/usr/local/jboss/bin/run.sh -c default --host 0.0.0.0 2>&1 > /usr/local/jboss/server/default/log/console.log'-jboss&;;stop)echo"Encerrando JBOSS"/usr/local/jboss/bin/shutdown.sh-S
;;*)echo"Usage: /etc/init.d/jboss {start|stop}"exit1esacexit0
Entendi...
Mas como faço pra finalizar o servico em java???
Acho q com o killall daria, mas precisava ser mais especifico, pois futuramente vou precisar usar mais de um serviço java, e não posso matar todos..
Eu dei a dica de usar "start" e "stop"; rode algum programa (no stop) que mate "gentilmente" o seu programa.
Por exemplo, vocé pode deixar uma thread do seu programa checando uma vez por segundo se um determinado arquivo existe em um determinado diretório. Se esse tal arquivo existir, apague-o, faça o que for necessário para sair direitinho do seu programa, e saia com System.exit(0).
O "stop", no seu caso, simplesmente cria esse arquivo (talvez com o programa "touch") para que o programa Java saísse "direitinho".
Não use "killall" porque é um verdadeiro genocídio. Normalmente em Unix você faz o seguinte:
Ao iniciar algo com "&" (como você fez abaixo), é possível obter o PID desse programa (com $! ) e jogá-lo em um arquivo. (No caso abaixo, em /root/teste/teste.jar.pid mas você pode jogar em qualquer outro lugar)
Entendi, legal...
Mas nessa primeira forma, usando o system.exit() no caso criaria um arquivo quando iniciasse o programa?
Ai ficaria checando repetidamente a existencia do arquivo, caso eu apagasse o mesmo o programa finalizaria, é isso???
Esse segundo método também me ajudaria, pois vão ser raras as vezes em que vou dar o comando de stop no serviço.
Na verdade só de iniciar como serviço no linux já estaria legal.
Editei o codigo que vc criou acima, ve se execuraria corretamente:
Fiz dessa maneira e salvei no etc/init.d
Dei as permissões para execução..
Criei um atalho no etc/rc3.d para iniciar com o sistema, mas não funcionou...
T
thingol
Amigo, cuidado - a aspa do “kill” não é a do apóstrofo ou acento agudo.
É a da crase ou acento grave; se for difícil digitar isso (digite uma crase e então um espaço - isso deve ficar na mesma tecla onde está o acento agudo, usualmente à direita da letra P), use Alt+96 (`) - segure a tecla Alt, e no teclado numérico tecle o número 96. Então solte a tecla Alt.
C
cego
Amigo usei o comando com crase, como vc passou, mas não funcionou o comando kill.
criou o teste.jar.pid com o numero do processo, mas para finalizar com o kill deu o seguinte erro:
@root> kill teste.jar.pid
bash: kill: teste.jar.pid: arguments must be process or jobs IDs
Acho q o echo não está passando o numero do processo para o comando kill.
O comando para escrever no prompt o conteudo no arquivo é somente echo mesmo???
T
thingol
Só uma perguntinha - qual é o conteúdo do arquivo "/var/programa/teste.jar.pid "?
cat /var/programa/teste.jar.pid
C
cego
thingol:
Só uma perguntinha - qual é o conteúdo do arquivo "/var/programa/teste.jar.pid "?
cat /var/programa/teste.jar.pid
O que tem dentro do arquivo teste.jar.pid é exatamente o numero do processo.
o cat me devolve exatamente o conteudo do arquivo, ou seja o número do processo.
Funciona legal, agora sim deu certo.
Consegui também outra maneira de finalizar o processo usando o grep
basta usar: kill ps ax|grep nomedoprocesso - O grep busca no ps o id do processo com o nome que vc especificou na busca e finaliza o mesmo.
Agora gostaria de saber se teria a possibilidade de colocar no start/stop os flags de [OK] e [FALHOU], analisando se os processos foram inicializados e/ou finalizados com sucesso…
V
Valdirei
Galera, bom dia!
Estou com um probleminha, bem chatinho. Estou instalando uma maquina com Ubuntu e preciso iniciar uma aplicação Java junto com o sistema.
tenho o seguinte Arquivo para iniciar o programa: /usr/lib/jvm/java-6-sun/bin/java -cp ./booster-1.08.jar br.com.xxxx.ras2.mts.booster.Main
Porem não consigo montar o script para inicializar pelo init.d.
Alguem poderia me ajudar.
Abrigado!
L
leandroriguete
Mesmo o post sendo antigo como foi de bastante utilizada para que eu podese resolver meu problema segue uma dica .
Coloque isso no inicio do seu script de serviço , aponte para o direto onde está instalado java.