como executar o script abaixo na inicialização do UBUNTU

Iniciado por Valdirei, 21 de Maio de 2011, 14:50

tópico anterior - próximo tópico

Valdirei

Srs. boa tarde!
Onde devo colocar o script abaixo para que seja executado na inicialização do Ubuntu.
Lembrando que este script esta dentro do diretório do aplicativo e funciona.

#!/bin/sh
Export DISPLAY=:0
JAVA_HOME="./..java"
PATH="$JAVA_HOME/bin:$PATH"
CLASSPATH="$JAVA_HOME/lib"
export JAVA_HOME PATH CLASSPATH
java -cp ./aplicacao.jar br.com.dominio.ras2.mnt.aplicacao.Main

Preciso executa-lo na inicialização do Sistema.

Obrigado!


RonaldoRG

Você dá permissão de execução para o script, depois vá no menu Sistema->Preferências->Aplicativos de sessão clique em adicionar. No campo nome bota o nome do script, no campo comando coloca o caminho onde o script tá salvo.

T+.
Ubuntu 12.04

Valdirei

Ronaldo, ja fiz este procedimento, mas não funcionou.
Nada acontece.
Mais alguma dica?

Valeu

irtigor


RonaldoRG

Pela maneira gráfica é o modo que conheço. Ou o script tá sem permissão de execução ou o caminho pra ele tá errado.

Agora tem maneiras de você colocar ele em determinada pasta do sistema pra ele ser executado junto com o sistema.

Vamos aguardar se aparece alguém com mais orientações.

T+.
Ubuntu 12.04

fpissarra

Citação de: Valdirei online 21 de Maio de 2011, 14:50
Srs. boa tarde!
Onde devo colocar o script abaixo para que seja executado na inicialização do Ubuntu.
Lembrando que este script esta dentro do diretório do aplicativo e funciona.

#!/bin/sh
Export DISPLAY=:0
JAVA_HOME="./..java"
PATH="$JAVA_HOME/bin:$PATH"
CLASSPATH="$JAVA_HOME/lib"
export JAVA_HOME PATH CLASSPATH
java -cp ./aplicacao.jar br.com.dominio.ras2.mnt.aplicacao.Main

Preciso executa-lo na inicialização do Sistema.

Obrigado!

Você vai ter que mudar o seu script um cadinho... Dê uma olhada nos scripts em /etc/init.d.

Uma vez que você conseguir responder corretamente ao parâmetro "start" e "stop" no seu script, usar paths completos ao invés de relativos e verificar as permissões para o seu script, crie os links em /etc/rc3.d/ e /etc/rc5.d. Se seu script tem o nome de "myscript", fica assim:

ln -s /etc/init.d/myscript /etc/rc3.d/S99myscript
ln -s /etc/init.d/myscript /etc/rc5.d/S99myscript
ln -s /etc/init.d/myscript /etc/rc3.d/K10myscript
ln -s /etc/init.d/myscript /etc/rc5.d/K10myscript


Por que rc3.d e rc5.d? Esses são runlevels. O 3 é para o modo console e o 5 para o modo gráfico. Se você usa a versão "server" do Ubuntu (ao invés da desktop), só precisa do runlevel 3. Ou seja, se não usa o modo gráfico, não precisa do runlevel 5.

Claro que a prioridade 99 para startup foi escolhida ao acaso aqui e a prioridade 10 para Kill também. Escolha os valores adequados de acordo com o seu sistema.

Valdirei

FPissara, Obrigado pelas dicas.

Mas sem querer abusar da boa vontade dos colegas.

Não faço a mínima idéia de como colocar estes parâmetros neste script.
Você teria algum exemplo para me passar, pois verifiquei na pasta Init.d e os scripts são muito longos.
E eu sou muito ruim de logica.

Obrigado

sigur

Citação de: Valdirei online 22 de Maio de 2011, 14:00
FPissara, Obrigado pelas dicas.

Mas sem querer abusar da boa vontade dos colegas.

Não faço a mínima idéia de como colocar estes parâmetros neste script.
Você teria algum exemplo para me passar, pois verifiquei na pasta Init.d e os scripts são muito longos.
E eu sou muito ruim de logica.

Obrigado

não entendo desse assunto, mas tentei ler o script pára ver. Será que o problema não está aqui:
JAVA_HOME="./..java"

Talvez precise especificar melhor essa pasta, já que está sendo executada por um script salvo em outro local, talvez...

Valdirei

Sigur, o problema não esta ai, pois esta linha indica a localização da pasta de contem o Java.
Ou seja a pasta que contem o java esta na mesma pasta onde esta o arquivo .jar.

Mas valeu pela tentativa.

fpissarra

#9
Citação de: Valdirei online 22 de Maio de 2011, 14:00
FPissara, Obrigado pelas dicas.

Mas sem querer abusar da boa vontade dos colegas.

Não faço a mínima idéia de como colocar estes parâmetros neste script.
Você teria algum exemplo para me passar, pois verifiquei na pasta Init.d e os scripts são muito longos.
E eu sou muito ruim de logica.

Obrigado

Coloque as variáveis de ambiente PATH, CLASSPATH, JAVA_HOME e DISPLAY no profile do $HOME do usuário sob o qual sua aplicação vai rodar. Se for sob root, coloque em /root/.profile ou /root/.bash_profile, se for em outro usuário coloque em /home/usuario/.profile ou /home/usuario/.bash_profile. Pode colocar também em /etc/profile (mas não é muito legal ficar alterando configurações do sistema!). Não esqueça de exportá-las!

O seu script ficaria mais ou menos assim:

#!/bin/bash

# defina o DIRETÓRIO completo da sua aplicação aqui!
DIR_APLICACAO=/usr/local/myapp

# defina o USUÁRIO sob o qual sua aplicação vai rodar aqui!
USER="root"

USE_SU=""
if [[ $USER != "root" ]]; then
 USE_SU="su -l $USER"
fi

start() {
 APPPID=$(ps -e | grep aplicacao.jar | awk '{print $1}')
 if [[ ! -z APPPID ]]; then
   echo Aplicacao aplicacao.jar já está em execução.
   exit 1
 fi

 $USE_SU "java -cp $DIR_APLICACAO/aplicacao.jar br.com.dominio.ras2.mnt.aplicacao.Main"
}

stop() {
 /* Código para PARAR sua aplicação aqui.
     Isso é IMPORTANTE!
     A maneira abaixo NÂO é a melhor possível! */

 APPPID=$(ps -e | grep aplicacao.jar | awk '{print $1}')
 if [[ ! -z APPPID ]]; then
   kill -9 $APPPID
 fi
}

case "$1" in
start)
 start
 ;;
stop)
 stop
 ;;
restart)
 stop
 start
 ;;
*)
 echo "Usage: myservice {start|stop|restart}"
 exit 1
 ;;
esac

exit 0

Valdirei

Olá, pessoal boa noite!
Demorei, mas retornei.

Fpissarra, Fiz as alterações no seu modelo, porem não obtive sucesso.
Segue o meu script abaixo, se alguem puder ajudar a resolver o problema eu agradeço muito.

#!/bin/bash

# defina o DIRETÓRIO completo da sua aplicação aqui!
PATH=/opt/Anfo/mts/anfo=/usr/local/myapp

# defina o USUÁRIO sob o qual sua aplicação vai rodar aqui!
USER="root"

USE_SU=""
if [[ $USER != "root" ]]; then
  USE_SU="su -l $USER"
fi

start() {
  APPPID=$(ps -e | grep anfo-1.06.jar | awk '{print $1}')
  if [[ ! -z APPPID ]]; then
    echo anfo-1.06.jar já está em execução.
    exit 1
  fi

  $USE_SU "java -cp $/opt/Anfo/mts/anfo/anfo-1.06.jar br.com.itsco.ras2.mts.anfo.Main"
}

stop() {
  /* Código para PARAR sua aplicação aqui.
      Isso é IMPORTANTE!
      A maneira abaixo NÂO é a melhor possível! */

  APPPID=$(ps -e | grep anfo-1.06.jar | awk '{print $1}')
  if [[ ! -z APPPID ]]; then
    kill -9 $APPPID
  fi
}

case "$1" in
start)
  start
  ;;
stop)
  stop
  ;;
restart)
  stop
  start
  ;;
*)
  echo "Usage: myservice {start|stop|restart}"
  exit 1
  ;;
esac

exit 0

fpissarra

#11
PATH está definido errado. E outra coisa que você pode tentar é definir a varíavel JAVA_HOME. Tente isso:

PATH = "$PATH:/opt/Anfo/mts/anfo:/usr/local/myapp"

# Mude para o diretório onde o seu java está instalado.
JAVA_HOME = "/usr/share/jdk1.6.0_24"
export JAVA_HOME


Só que é provável que isso não funcione como esperado. Por isso a idéia de definir essas variáveis em /root/.profile ou em /home/user/.bash_profile (se for disparar o JAVA como outro usuário que não o root).

Você pode tirar a variável USE_SU e colocar o usuário que rodará o serviço diretamente:

CMD="su -l myuser -c \"$JAVA_HOME/java -cp /opt/Anfo/mts/anfo/anfo-1.06.jar br.com.itsco.ras2.mts.anfo.Main\""
$CMD


Sorry... esqueci do parâmetro -c.

Se for rodar o serviço como root então não precisa do "su":

$JAVA_HOME/java -cp /opt/Anfo/mts/anfo/anfo-1.06.jar br.com.itsco.ras2.mts.anfo.Main

Note que, no bash, usa-se $ para referenciar as variáveis... assim, colocar $ no path da aplicação é um erro.

Pode ajudar.