Ubuntu derrubando processo .jar se inicializado pelo crontab.

Iniciado por tarcisiodpl, 27 de Junho de 2012, 14:37

tópico anterior - próximo tópico

tarcisiodpl

Boa tarde!

Eu tenho um processo (.jar) que toda vez que o Ubuntu inicializa-o automaticamente (através de um crontab, por exemplo.), ele aparece por um instante e logo some da tabela de processos do Ubuntu.
Já se eu rodar ele manualmente, abrindo um terminal e digitanto "java -jar qhdns.jar", o mesmo funciona normalmente. Esse processo acessa um link para saber o IP externo da máquina. Talvez o Ubuntu esteja derrubando esse processo por questão de segurança... não sei. Alguém passou por algo parecido ou tem uma ideia de como resolver?

zekkerj

Problema 1:
O Cron executa os processos a partir de um ambiente limpo. Já o Java depende de uma série de variáveis definidas no ambiente --- JAVA_HOME, JDK_VERSION, etc, etc.

Assim, quando o processo é executado a partir do Cron, essas variáveis não estão definidas, e o java não executa direito.

Solução: Adicione essas variáveis de ambiente ao script que está chamando o java.

Problema 2:
Se esse jar estiver tentando usar o display gráfico, ele não vai funcionar.

Solução: Arrume outra forma de executá-lo, que não seja pelo cron.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

irtigor

Até dá pra contornar o "Problema 2", mas você vai ter que ser mais especifico.

tarcisiodpl

Oi zekkerj,

Obrigado pelos esclarecimentos, mas acho que não resolve meu caso. Deixe-me explicar melhor para ver se ajuda a desvendar esse mistério.

Eu tenho um scrip na crontab que roda a cada 1 minuto, chamado "gerente.sh". Ele verifica se os 8 processos que dão suporte ao meu sistema estão todos rodando (todos eles são arquivos .jar) . Caso algum deles tenha parado, o "gerente.sh" executa-o novamente. Um desses processos que o "gerente.sh" controla é o "qh.jar".

O que ocorre com o "qh.jar":
A cada minuto ele aparece na tabela de processos ("ps aux") e logo em seguida some. Os demais processos funcionam normalmente. Como ele sumiu, no minuto seguinte ele novamente é executado, aparece na lista de processos e some de novo... e assim por diante. Mas nunca chega a ser completamente executado, até porque ele ficar em loop infinito.

No entando, quando eu digito o mesmo comando que está no script executado pelo crontab no terminal, consigo executá-lo normalmente ("java -jar qh.jar").

Como o "qh.jar" tem como uma de suas atribuições, a cada 1 minuto acessa um link e coletar informações do mesmo, julgo eu que o ubuntu, por questão de segurança, não mantém o "qh.jar" na lista de processos quando ativado automaticamente pelo "gerente.sh".

Bom... é isso :D

Alguam luz?

irtigor

Você não respondeu se é um programa gráfico ou não. Já olhou os logs do cron? Outra coisa que pode dar uma pista é a saída do stdout e sdterr, se for um script bash, troque "java -jar qh.jar &" por "java -jar qh.jar &> /tmp/log_do_jar &", e depois que for executado olhe o arquivo /tmp/log_do_jar.

Se não identificar o problema, junto com o "log_do_jar", mostre o script e como ele é chamado (qual crontab, por ex).

zekkerj

Outra dica: tudo que é executado pelo cron e que gere alguma saída é enviado por correio pro usuário que executou o processo. Instale um cliente de correio como o "mutt" e veja as mensagens de correio do seu usuário (ou do root), talvez a dica pra resolver o problema apareça por lá.

sudo apt-get install mutt

mutt


Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

tarcisiodpl

Não tem nada gráfico nesse arquivo não.
Vou testar essas sugestões para ver o que acontece.
Obrigado!
Obviamente depois eu digo no que deu.

tarcisiodpl

#7
Pessoal... eu fiz o seguinte...
O arquivo "qh.jar" é iniciado pela primeira vez como uma variável de seção (dessa forma o processo não caiu imediatamente!!!).
O arquivo "gerente.sh" está no crontab e é executado a cada minuto. (nenhuma novidade aqui)
O arquivo "gerente.sh" verifica se o qh.jar caiu. Caso sim, ele reinicia o processo. (nenhuma novidade aqui)
E só!

O ubuntu não permitia que o script "gerente.sh" inicializasse pela primeira vez o "qh.jar", mas uma vez que o "qh.jar" foi inicializado como aplicativo de seção, ele não foi derrubado pelo ubuntu!
A partir daí o "gerente.sh" funciona normalmente, ou seja, o ubuntu passa a não derrubar "qh.jar" quando reinicializado pelo script "gerente.sh".

Deu para entender?

Obrigado pela ajuda de vocês!

Problema resolvido! :D

zekkerj

Tarcisio, pq vc acha que era o Ubuntu que estava derrubando seu aplicativo? A gente não te explicou que o cron tem essas limitações? O aplicativo simplesmente não iniciava pq não tinha o ambiente correto, não era o sistema que derrubava ele...
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

irtigor

É, nada colabora com essa visão de que o Ubuntu derrubava. A saída stderr do aplicativo deve confirmar o que o zekkerj falou, mas você não mostrou.