I have a Ubuntu 10.04 machine that has tomcat6 on it. When I start tomcat6 with /etc/init.d/tomcat6 start
I get
* Starting Tomcat servlet engine tomcat6
/bin/bash already running.
and the server fails to start. Unfortunately, there is nothing in /var/log/tomcat/catalina.out to help debug the issue. With some cleverly placed echo statements it seems to be the line from /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"
The only thing I've changed in this script is TOMCAT6_USER=root
. In servers.xml, the only thing I've changed is <Connector port="80" protocol="HTTP/1.1"
from port 8080. I have tried reinstalling the package by first removing everything sudo apt-get --purge remove tomacat6
and then sudo apt-get install tomcat6
but this has not solved the issue. I have also restarted the server multiple times in hopes of some magic. Everything was working until I restarted my server. Any ideas?
-
Hi,
Looking at the man page for start-stop-daemon, it looks for processes which match the name, uid, and/or gid of the command it's being asked to start. From the error message, I'd guess it may be doing this based on the /bin/bash command - so it's finding that there's already a root process running the /bin/bash command, and refusing to start a "duplicate" one.
You could work around this by hacking the init script around. But running Tomcat as root is Bad, so better to look at other ways to send port 80 to Tomcat, even while Tomcat runs as a non-root user. The most common approach is to run Apache httpd in front, another (if you don't want to fiddle with connectors) is to use iptables to map port 80.
See the serverfault question for details on how to do these.
From Kief -
Sometimes you gotta do what you gotta do.
Here's a patch that makes running tomcat as root work:
--- 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
-
There's an Ubuntu bug for this issue, with a proposed patch.
It's not necessarily anything to do with running as root - if your tomcat6 user has a /bin/bash process (say, you're using it to run some commands to support your Tomcat application), then you will hit it as well.
From crb