Fórum Ubuntu Linux - PT

Suporte Técnico => Servidores => Tópico iniciado por: bred81 em 09 de Agosto de 2012, 15:30

Título: [Resolvido]Start e Stop em scritp com a inicialização?
Enviado 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
Código: [Selecionar]
sudo update-rc.d daemonXMLTVScheduler defaults 99Me 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
Título: Re: Subir script com o sistema
Enviado por: bred81 em 09 de Agosto de 2012, 16:50
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?
Título: Re: Star e Stop em scritp com a inicialização?
Enviado por: bred81 em 09 de Agosto de 2012, 18:19
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:
Código: [Selecionar]
# 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:
Código: [Selecionar]
# 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.
Título: Re: Start e Stop em scritp com a inicialização?
Enviado por: zekkerj em 12 de Agosto de 2012, 16:23
Esse script usa algum tipo de gráfico? Se usar, sem chance. Só quando o usuário logar.
Título: Re: Start e Stop em scritp com a inicialização?
Enviado por: bred81 em 13 de Agosto de 2012, 11:44
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.
Título: Re: Start e Stop em scritp com a inicialização?
Enviado por: zekkerj em 13 de Agosto de 2012, 12:23
E o resto do ambiente, tipo, JAVA_HOME, etc?
Título: Re: Start e Stop em scritp com a inicialização?
Enviado por: bred81 em 13 de Agosto de 2012, 12:37
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.
Título: Re: Start e Stop em scritp com a inicialização?
Enviado por: zekkerj em 13 de Agosto de 2012, 12:59
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:

Código: [Selecionar]
#! /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.
Título: Re: Start e Stop em scritp com a inicialização?
Enviado por: bred81 em 13 de Agosto de 2012, 13:23
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.
Título: Re: Start e Stop em scritp com a inicialização?
Enviado por: bred81 em 14 de Agosto de 2012, 18:40
Muito obrigado, era esse o tratamento que estava faltando.
Ficou assim:
Citar
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
Título: Re: [Resolvido]Start e Stop em scritp com a inicialização?
Enviado por: zekkerj em 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...
Título: Re: [Resolvido]Start e Stop em scritp com a inicialização?
Enviado por: bred81 em 16 de Agosto de 2012, 09:29
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.
Título: Re: [Resolvido]Start e Stop em scritp com a inicialização?
Enviado por: ThiagoNalli em 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
Título: Re: [Resolvido]Start e Stop em scritp com a inicialização?
Enviado por: bred81 em 16 de Agosto de 2012, 09:54
@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é?
Título: Re: [Resolvido]Start e Stop em scritp com a inicialização?
Enviado por: ThiagoNalli em 16 de Agosto de 2012, 10:15
@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.
Título: Re: [Resolvido]Start e Stop em scritp com a inicialização?
Enviado por: zekkerj em 16 de Agosto de 2012, 10:58
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.
Título: Re: [Resolvido]Start e Stop em scritp com a inicialização?
Enviado por: bred81 em 16 de Agosto de 2012, 19:47
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.
Título: Re: [Resolvido]Start e Stop em scritp com a inicialização?
Enviado por: ThiagoNalli em 17 de Agosto de 2012, 02:00
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