Corrigir uma mensagem de erro tomcat6 “/ bin / bash já em execução” ao iniciar o tomcat?

1

Eu tenho uma máquina Ubuntu 10.04 que tem tomcat6 nela. Quando eu inicio o tomcat6 com /etc/init.d/tomcat6 start , obtenho

* Starting Tomcat servlet engine tomcat6
/bin/bash already running.

e o servidor falha ao iniciar. Infelizmente, não há nada em /var/log/tomcat/catalina.out para ajudar a depurar o problema. Com algumas instruções echo inteligentemente colocadas, parece ser a linha de /etc/init.d/tomcat6:

start-stop-daemon --start -u "$TOMCAT6_USER" -g "$TOMCAT6_GROUP" \
                -c "$TOMCAT6_USER" -d "$CATALINA_TMPDIR" \
                -x /bin/bash -- -c "$AUTHBIND_COMMAND $TOMCAT_SH"

A única coisa que eu mudei neste script é TOMCAT6_USER=root . Em servers.xml, a única coisa que alterei é <Connector port="80" protocol="HTTP/1.1" da porta 8080. Eu tentei reinstalar o pacote primeiro removendo tudo sudo apt-get --purge remove tomacat6 e, em seguida, sudo apt-get install tomcat6 , mas isso não resolveu o problema. Eu também reiniciei o servidor várias vezes na esperança de alguma mágica. Tudo estava funcionando até que eu reiniciei o meu servidor. Alguma idéia?

    
por Andrew Austin 02.07.2010 / 16:47

4 respostas

1

Às vezes você precisa fazer o que precisa fazer.

Aqui está um patch que faz com que o tomcat seja executado como trabalho raiz:

--- init.d.old/tomcat6  2010-09-01 15:31:01.996208252 -0700
+++ init.d/tomcat6  2010-09-01 15:30:10.315146226 -0700
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/sh -x
 #
 # /etc/init.d/tomcat6 -- startup script for the Tomcat 6 servlet engine
 #
@@ -141,6 +141,12 @@
        cd \"$CATALINA_BASE\"; \
        \"$CATALINA_SH\" $@"

+   cat >/etc/init.d/tomcat_exec.sh <<-EOT
+   #!/bin/bash
+   $TOMCAT_SH
+   EOT
+   chmod +x /etc/init.d/tomcat_exec.sh 
+
    if [ "$AUTHBIND" = "yes" -a "$1" = "start" ]; then
        TOMCAT_SH="'$TOMCAT_SH'"
    fi
@@ -151,7 +157,7 @@
    chown $TOMCAT6_USER "$CATALINA_PID" "$CATALINA_BASE"/logs/catalina.out
    start-stop-daemon --start -u "$TOMCAT6_USER" -g "$TOMCAT6_GROUP" \
        -c "$TOMCAT6_USER" -d "$CATALINA_TMPDIR" \
-       -x /bin/bash -- -c "$AUTHBIND_COMMAND $TOMCAT_SH"
+       -x /etc/init.d/tomcat_exec.sh 
    status="$?"
    set +a -e
    return $status
    
por 07.09.2010 / 19:21
1

um bug do Ubuntu para este problema, com um patch proposto.

Não é necessariamente nada a ver com a execução como root - se o seu usuário tomcat6 tiver um processo / bin / bash (digamos, você o estiver usando para executar alguns comandos para suportar seu aplicativo Tomcat), você o atingirá como bem.

    
por 15.09.2010 / 17:50
0

Olhando para a página man do daemon start-stop, ele procura por processos que correspondam ao nome, uid e / ou gid do comando que está sendo solicitado a iniciar. A partir da mensagem de erro, eu acho que pode estar fazendo isso com base no comando / bin / bash - por isso, está descobrindo que já existe um processo raiz executando o comando / bin / bash e se recusando a iniciar um comando "duplicado".

Você poderia contornar isso hackeando o script de inicialização. Mas executar o Tomcat como root é Ruim, então é melhor procurar outras maneiras de enviar a porta 80 para o Tomcat, mesmo enquanto o Tomcat é executado como um usuário não-root. A abordagem mais comum é executar o Apache httpd na frente, outro (se você não quer mexer com conectores) é usar o iptables para mapear a porta 80.

Veja o questão de falha de servidor para detalhes sobre como fazer isso.

    
por 07.07.2010 / 14:38
0

Este é um bug conhecido do Ubuntu que já foi corrigido: link

O script de inicialização não iniciará o daemon tomcat6 se o usuário tiver um shell bash em execução.

A correção listada no relatório de erros é simplesmente adicionar -p "$CATALINA_PID" ao comando start-stop-daemon.

*** tomcat6~ 2010-10-11 13:21:52.000000000 -0500
--- tomcat6 2010-11-03 12:19:04.000000000 -0500
***************
*** 152,154 ****
   start-stop-daemon --start -b -u "$TOMCAT6_USER" -g "$TOMCAT6_GROUP" \
! -c "$TOMCAT6_USER" -d "$CATALINA_TMPDIR" \
    -x /bin/bash -- -c "$AUTHBIND_COMMAND $TOMCAT_SH"
--- 152,154 ----
   start-stop-daemon --start -b -u "$TOMCAT6_USER" -g "$TOMCAT6_GROUP" \
! -c "$TOMCAT6_USER" -d "$CATALINA_TMPDIR" -p "$CATALINA_PID" \
    -x /bin/bash -- -c "$AUTHBIND_COMMAND $TOMCAT_SH"
}}}
    
por 06.10.2013 / 17:59