Se eu exportar uma variável de ambiente nos scripts de inicialização, ela persiste?

3

Quando crio um script de inicialização /etc/init.de faço uma exportvariável, essa variável persiste e é "visível" para o processo iniciado?
Para ser específico, tenho o seguinte script para iniciar o tomcat no init.d com o qual começo manualmente start:

#!/bin/bash
RETVAL=$?
export JRE_HOME=/home/jre
export PATH=/home/jre/bin/:${PATH}
export CATALINA_HOME=/home/apache-tomcat-7.0.25
case "$1" in
 start)
        if [ -f $CATALINA_HOME/bin/startup.sh ];
          then
            echo $"Starting Tomcat"
            /bin/su root $CATALINA_HOME/bin/startup.sh
        fi
        ;;
 stop)
        if [ -f $CATALINA_HOME/bin/shutdown.sh ];
          then
            echo $"Stopping Tomcat"
            /bin/su root $CATALINA_HOME/bin/shutdown.sh
        fi
        ;;
 restart)
        if [ -f $CATALINA_HOME/bin/shutdown.sh ];
          then
            echo $"Stopping Tomcat"
            /bin/su root $CATALINA_HOME/bin/shutdown.sh
        fi
        if [ -f $CATALINA_HOME/bin/startup.sh ];
          then
            echo $"Starting Tomcat"
            /bin/su root $CATALINA_HOME/bin/startup.sh
        fi
        ;;        
 *)
        echo $"Usage: $0 {start|stop}"
        exit 1
        ;;
esac
exit $RETVAL   

Agora, no Tomcat, estou usando o pool de conexão e, quando uso um URL absoluto, tudo funciona bem. Ou seja:url="jdbc:h2:file:/home/apache-tomcat-7.0.25/webapps/myDB;SCHEMA=mySchema"

Mas se eu usar um URL relativo, ou seja, $CATALINA_HOMEno URL, url="jdbc:h2:file:$CATALINA_HOME\webapps\myDB;SCHEMA=mySchema"isso NÃO funcionará e eu recebo a exceção JNDI.
Observe que no meu script eu exportei $CATALINA_HOMEpara ser/home/apache-tomcat-7.0.25

Parece que o $CATALINA_HOMEnão está definido para a instância iniciada do Tomcat.
Poderia ser este o caso? Alguém tem uma idéia de por que o URL com a variável de ambiente não funciona?

Jim
fonte

Respostas:

6

Quando um novo processo é criado, o ambiente é copiado do pai. Portanto, quaisquer variáveis ​​de ambiente definidas no script antes de iniciar outro processo devem existir.

Alguns programas como su/sudoeles filtram o ambiente, dependendo de como são chamados, como medida de segurança. Portanto, seu script init está chamando o suque está iniciando $CATALINA_HOME/bin/startup.sh, o que eu acho que está realmente fazendo a inicialização do Tomcast. Algo provavelmente está removendo ou ignorando a variável.

Eu me pergunto por que você está chamando usando su rootde dentro de um script init. Os scripts de inicialização são executados como root por padrão; não deve haver razão para você precisar se tornar root novamente. Se eu fosse você, abandonaria o que parece ser um chamado inútil su.

Apenas para ajudá-lo a solucionar problemas. Como root, no Linux, quando você /procmontou, pode ver qual é o ambiente atual.

Por exemplo, se o tomcat tivesse um ID de processo 1234, você desejaria dar uma olhada no conteúdo de /proc/1234/environ. Tudo o que está definido deve estar lá.

Zoredache
fonte
Eh, esse comentário não faz sentido.
Zoredache
Nunca mind.You são right.In qualquer caso, o problema foi que tomcat não aceita suportes de ambiente em arquivos de conf
Jim