Saber quando um serviço Java finaliza (termina a execução ou é matado)

Olá pessoal…

A minha dúvida é a seguinte: Tenho um serviço desenvolvido em Java que é rodado em linha de comando no linux. Ás vezes, acontece que o programa pára sem nenhuma explicação. Teria como eu identificar isso, via código? Quando um programa é matado usando o kill do linux, ou qnd ele finaliza por algum erro, sei lá, System.exit, a JVM chama algum método pra finalizar a aplicação, de uma maneira que eu possa sobrescrevê-lo e gerar log, ou até me enviar um SMS dizendo q o serviço caiu?!?

Alguém já fez ou conhece algo do tipo?

Valeu. Flw

Uma explicação deve ter sim :smiley:

É uma prática um pouco porca, mas eu acho que vai funcionar pelo menos para vc tentar identificar o erro…
Estou presumindo que sua aplicação em algum momento está dando um erro. O que vc poderia fazer é dentro do método main, adicionar um try para Throwable e no catch usar um log para armazenar o stack trace.

public static void main( String[] args ) { try { // início da aplicação } catch ( Throwable exc ) { // faz o log do erro } }

Throwable é a interface mãe de todos os erros e excessões do Java. Se algum problema ocorrer, é provável que este try trate o erro para você.

Como falei é algo um pouco porco, deve ter outra maneira mais elegante de se fazer isso :smiley:

Até mais!

Para executar algo quando o serviço está sendo fechado, procure por “shutdown hook”. Só não sei se o kill vai respeitar a ordem de finalização.

Até!