[Resolvido]Start e Stop em scritp com a inicialização?

Iniciado por bred81, 09 de Agosto de 2012, 15:30

tópico anterior - próximo tópico

bred81

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, 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 é:
Citar
#!/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
O que o Mario foi fazer no pscicólogo?
- Ele estava passando por uma fase difícil...

bred81

Identifiquei um erro até agora:
O scritp, para funcionar, deve estar da seguinte maneira:
Citar
$ 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?
O que o Mario foi fazer no pscicólogo?
- Ele estava passando por uma fase difícil...

bred81

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.
O que o Mario foi fazer no pscicólogo?
- Ele estava passando por uma fase difícil...

zekkerj

Esse script usa algum tipo de gráfico? Se usar, sem chance. Só quando o usuário logar.
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

bred81

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.
O que o Mario foi fazer no pscicólogo?
- Ele estava passando por uma fase difícil...

zekkerj

E o resto do ambiente, tipo, JAVA_HOME, etc?
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

bred81

#6
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.
O que o Mario foi fazer no pscicólogo?
- Ele estava passando por uma fase difícil...

zekkerj

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.
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

bred81

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.
O que o Mario foi fazer no pscicólogo?
- Ele estava passando por uma fase difícil...

bred81

Muito obrigado, era esse o tratamento que estava faltando.
Ficou assim:
Citarcat /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
O que o Mario foi fazer no pscicólogo?
- Ele estava passando por uma fase difícil...

zekkerj

Bem, só a parte do stop que não vai funcionar como vc espera. Mas deixa pra lá, por enquanto...
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

bred81

Citação de: zekkerj online 14 de Agosto de 2012, 19:21
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.
O que o Mario foi fazer no pscicólogo?
- Ele estava passando por uma fase difícil...

ThiagoNalli

@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

Citação de: ThiagoNalli online 16 de Agosto de 2012, 09:47
@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é?
O que o Mario foi fazer no pscicólogo?
- Ele estava passando por uma fase difícil...

ThiagoNalli

@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.