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 
É 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 
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é!