Fórum Ubuntu Linux - PT
Suporte Técnico => Servidores => Tópico iniciado por: bred81 em 09 de Agosto de 2012, 15:30
-
Fala pessoal.
Estou com o seguinte problema: eu tenho um script que executa um .jar e gostaria de fazer ele ser rodado quando o sistema sobe.
Acompanhando a explicação do blog (http://www.debuntu.org/how-to-manage-services-with-update-rc.d), fiz o seguinte:
Coloquei o meu script em /sbin e em /etc/init.d
Rodei o comando sudo update-rc.d daemonXMLTVScheduler defaults 99
Me gerou as seguintes entradas:
$ ls -l /etc/rc?.d/*daemon*
lrwxrwxrwx 1 root root 30 Ago 9 15:20 /etc/rc0.d/K99daemonXMLTVScheduler -> ../init.d/daemonXMLTVScheduler
lrwxrwxrwx 1 root root 30 Ago 9 15:20 /etc/rc1.d/K99daemonXMLTVScheduler -> ../init.d/daemonXMLTVScheduler
lrwxrwxrwx 1 root root 30 Ago 9 15:20 /etc/rc2.d/S99daemonXMLTVScheduler -> ../init.d/daemonXMLTVScheduler
lrwxrwxrwx 1 root root 30 Ago 9 15:20 /etc/rc3.d/S99daemonXMLTVScheduler -> ../init.d/daemonXMLTVScheduler
lrwxrwxrwx 1 root root 30 Ago 9 15:20 /etc/rc4.d/S99daemonXMLTVScheduler -> ../init.d/daemonXMLTVScheduler
lrwxrwxrwx 1 root root 30 Ago 9 15:20 /etc/rc5.d/S99daemonXMLTVScheduler -> ../init.d/daemonXMLTVScheduler
lrwxrwxrwx 1 root root 30 Ago 9 15:20 /etc/rc6.d/K99daemonXMLTVScheduler -> ../init.d/daemonXMLTVScheduler
Mas, não consigo visualizar o meu "processo" com o comando ps aux.
Alguém pode me ajudar?
O conteúdo do meu script é:
#!/bin/bash
java -jar daemonXMLTVScheduler
==================================================
Eu sei que não é um serviço, mas, gostaria de subir esse script com o servidor e não quando um usuário logasse. Infelizmente só conheço essa maneira.
Até como indica nesse tópico: http://ubuntuforum-br.org/index.php?topic=64151.0
-
Identifiquei um erro até agora:
O scritp, para funcionar, deve estar da seguinte maneira:
$ cat /etc/init.d/daemonXMLTVScheduler.sh
#! /bin/sh
### BEGIN INIT INFO
# Provides: xmltvscheduler
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start parser at boot time.
# Description: Start parser at boot time.
### END INIT INFO
java -jar /home/fred/Downloads/xmltvscheduler.jar
exit 0
O problema agora é que não está matando o processo. Com o K99daemonXMLTVScheduler não deveria ser a primeira coisa a morrer?
-
Mais uma informação:
Removi dos runlevels (tá certo isso?) 0, 1 e 6 e ele está desligando o sistema, mas não está matando o processo.
Ficou o seguinte:
# update-rc.d daemonXMLTVScheduler.sh start 55 2 3 4 5 .
Ele dá warning de que não existe o stop.
Pergunta: Porque não funciona?
Eu tinha setado o seguinte:
# update-rc.d daemonXMLTVScheduler.sh start 55 2 3 4 5 . stop 80 0 1 6 .
Fiz dessa maneira porque percebi que nenhum processo era morto antes de alguns que considero principais para as pastas rc0, rc1, rc6.
-
Esse script usa algum tipo de gráfico? Se usar, sem chance. Só quando o usuário logar.
-
Não usa, apenas precisa do java porque é um .jar.
Tudo que ele faz é baixar um arquivo e ficar monitorando se há alterações nesse arquivo, de 3h em 3h.
-
E o resto do ambiente, tipo, JAVA_HOME, etc?
-
Sobre isso não saberia responder.
Poderia me dar uma instrução?
Não entendo nada da configuração do java... Acredito estarmos usando o java opensource.
----
Editado:Só pra deixar claro, está funcionando, minha dúvida agora é em relação ao fato de, quando adiciono no 0, 1 6 o meu "daemon", na hora de desligar ele entra em loop infinito.
-
Não entendi muito bem o seu problema... mas vamos lá: os scripts do diretório /etc/init.d usam uma estrutura de forma que quando acontece a inicialização, eles são chamados da forma "script start", e quando acontece a finalização, eles são chamados da forma "script stop".
Assim, espera-se que seu script reconheça e reaja a um parâmetro que pode ser "start" ou "stop", e como resultado desse parâmetro ele faça os procedimentos de inicialização ou finalização. Pelo que pude observar, seu script simplesmente dispara o tal daemon, sem observar se está sendo iniciado ou finalizado.
Uma forma simples de corrigí-lo pra isso é assim:
#! /bin/sh
### BEGIN INIT INFO
# Provides: xmltvscheduler
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start parser at boot time.
# Description: Start parser at boot time.
### END INIT INFO
start()
{
java -jar /home/fred/Downloads/xmltvscheduler.jar
}
stop()
{
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "$0 {start | stop | restart}"
esac
exit 0
Quanto a matar o processo, você vai ter que bolar uma forma de matar o processo, e colocar nessa função stop() dentro do script.
-
Beleza, muito obrigado. Eu vou demorar um pouco pra responder porque isso não é o principal agora, assim que botar a mão nisso de novo, eu volto aqui e coloco tudo que ocorreu e o que fiz.
-
Muito obrigado, era esse o tratamento que estava faltando.
Ficou assim:
cat /etc/init.d/daemonScheduler
#! /bin/sh
### BEGIN INIT INFO
# Provides: xmltvscheduler
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start parser at boot time.
# Description: Start parser at boot time.
### END INIT INFO
PID=$$
start()
{
java -jar /home/fred/Downloads/xmltvscheduler.jar
}
stop()
{
kill $PID
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "$0 {start | stop | restart}"
esac
exit 0
-
Bem, só a parte do stop que não vai funcionar como vc espera. Mas deixa pra lá, por enquanto...
-
Bem, só a parte do stop que não vai funcionar como vc espera. Mas deixa pra lá, por enquanto...
Não notei isso. Ele não está mais travando na hora de desligar/reiniciar. Valeu pela ajuda.
-
@bred81
Recomendo colocar um kill -9 $PID no seu processo de stop.
Isso que vc esta fazendo é algo para EPG? Trabalha com TV digital? rsrs
-
@bred81
Recomendo colocar um kill -9 $PID no seu processo de stop.
Isso que vc esta fazendo é algo para EPG? Trabalha com TV digital? rsrs
Exatamente!
Só colocar xmltv que tudo é descoberto. né?
-
@bred81
Trabalho como CAS Operator, e fazer a carga de arquivos XML de EPG é minha responsabilidade toda santa Madrugada... ;D
Ah, para não fugir do tópico, experimenta colocar o kill -9 $PID como falei.
-
A questão não é ser "kill -15", "-9", "-13" ou "-75".
A questão é que o PID que vcs estão matando é o PID errado... vcs estão matando o PID do próprio shell, não o do processo java original.
Mas não precisa ver isso agora, isso é secundário.
-
A questão não é ser "kill -15", "-9", "-13" ou "-75".
A questão é que o PID que vcs estão matando é o PID errado... vcs estão matando o PID do próprio shell, não o do processo java original.
Mas não precisa ver isso agora, isso é secundário.
Imaginei que seria isso.
Eu vou copiar depois o stop de um processo e coloco aqui.
To precisando resolver outras coisas, depois posto o resultado final.
-
A questão não é ser "kill -15", "-9", "-13" ou "-75".
A questão é que o PID que vcs estão matando é o PID errado... vcs estão matando o PID do próprio shell, não o do processo java original.
Mas não precisa ver isso agora, isso é secundário.
@Zekkerj, realmente, Erro meu não ter olhado onde estava a Váriavel do PID, ela esta antes mesmo do start, esta pegando o PID do processo e não do Java...
Ponto a você ;D