See quick notes next to your script:

On 1/15/2014 8:53 AM, Bush, Eddie wrote:


-----Original Message-----
From: Daniel Mikusa [mailto:dmik...@gopivotal.com]
Sent: Wednesday, January 15, 2014 10:19 AM
To: Tomcat Users List
Subject: Re: [tomcat7] rhel 6 - init.d script works; does not start on reboot

On Jan 15, 2014, at 11:01 AM, "Bush, Eddie" <eddie.b...@williams.com> wrote:



-----Original Message-----
From: Daniel Mikusa [mailto:dmik...@gopivotal.com]
Sent: Wednesday, January 15, 2014 9:54 AM
To: Tomcat Users List
Subject: Re: [tomcat7] rhel 6 - init.d script works; does not start on reboot

On Jan 15, 2014, at 10:32 AM, "Bush, Eddie" <eddie.b...@williams.com> wrote:

Howdy, List!

I'm in a bit of a pickle here. I'm a senior dev, and quite good at that, but 
for my new client I'm also charged with configuring our machines. We're running 
on Tomcat 7, so I grabbed the tgz and installed it per the instructions.

Everything works great! ... until I reboot the server :) At that point, 
everything else comes up, but tomcat does not.

I have removed all logs and rebooted and see nothing notable in any of the tomcat logs 
(because, of course, it did not start), nor can I find anything in syslog or messages. 
The chkconfig command reports that the script is configured to run for runlevel 2-5, and 
I've even inspected the links in rc.d/rc*.d and they are linked to the init.d script 
(which is the same danged script that works interactively via "service tomcat 
start/stop"!)

Dan> Where did you get the init script from?
EB> Off the net somewhere, initially. I tweaked it to use sudo to change user 
to tomcat:tomcat though, and I changed the chkconfig declaration to be extremely 
similar to what nginx uses, since that works fine. chkconfig likes the script, and 
sets it up in what looks to be perfect form (comparing to other things). These are 
pretty standard scripts though, yes? They basically just delegate to the scripts 
distributed with tomcat, which all end up calling catalina.sh :-)

Dan> Since it's not standard, can you include it here?  It may be perfectly 
fine, but it would be nice to see it regardless.
EB> cat /etc/init.d/tomcat
#!/bin/bash

echo "Let's start Tomcat! ... because Tomcat rocks!" > /tmp/tomcat.log

# chkconfig: - 84 16
# description: Tomcat Start Stop Restart
# processname: tomcat

### BEGIN INIT INFO
# Provides: tomcat
# Required-Start: $local_fs $remote_fs $network
# Required-Stop: $local_fs $remote_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start stop and restart tomcat
### END INIT INFO

JAVA_HOME=/usr/java/jdk1.7.0_45
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
CATALINA_HOME=/usr/share/apache-tomcat-7.0.47

echo "JAVA_HOME = $JAVA_HOME" >> /tmp/tomcat.log
echo "PATH = $PATH" >> /tmp/tomcat.log
echo "CATALINA_HOME = $CATALINA_HOME" >> /tmp/tomcat.log

case $1 in
start)
echo "START requested!" >> /tmp/tomcat.log
sudo -g tomcat -u tomcat sh $CATALINA_HOME/bin/startup.sh
;;
stop)
echo "STOP requested!" >> /tmp/tomcat.log
sudo -g tomcat -u tomcat sh $CATALINA_HOME/bin/shutdown.sh
;;
restart)
echo "RESTART requested!" >> /tmp/tomcat.log
sudo -g tomcat -u tomcat sh $CATALINA_HOME/bin/shutdown.sh
sudo -g tomcat -u tomcat sh $CATALINA_HOME/bin/startup.sh
;;
esac
exit 0


This won't work.

1. Use JRE_HOME and set it to where your JRE is installed

Technically you can use JAVA_HOME, but Tomcat no longer needs javac (unless you've changed the stock configuration).

2. sudo won't work if you have SELinux enabled

use /sbin/runuser

3. I use catalina.sh

My command to start Tomcat ends up looking like this:

$SU - $TOMCAT_USER -c "${CONFIG_OPTS} ${CAT_PID} ${TOMCAT_INSTANCE}" start > $SERVICE_LOG 2>1&!

(obviously all on one line)

where:

$SU is the proper su command (/sbin/su or /sbin/runuser)
$TOMCAT_USER is the tomcat user
$CONFIG_OPTS contains all of the options:
     CATALINA_HOME
     CATALINA_BASE
     JRE_HOME
$CAT_PID is the pid file to write
$TOMCAT_INSTANCE is $CATALINA_HOME/bin/catalina.sh
$SERVICE_LOG is where I write my service startup and shutdown messages

I run multiple Tomcats from one CATALINA_HOME (see RUNNING.txt in the Tomcat distribution). Each Tomcat gets its own init script, and each init script reads a corresponding configuration file that sets CATALINA_HOME, CATALINA_BASE, the PID file, and JRE_HOME. That way I can run multiple versions of Tomcat with different JREs and still use one init script (copied to a new service name for each Tomcat).

While the stop command is the same as the start command (just substitute stop for start), there are some other issues you have to worry about.

1. Is it really running?
2. Did it really stop?

Some misbehaving applications make it difficult to stop Tomcat. I currently loop for a configurable amount of time, and check the status of Tomcat once per second. If I fail to stop Tomcat after the configurable amount of time, I issue a kill -9. That's all logged so I know which Tomcat is causing problems, and I have an idea about which application is causing an issue.

Hope that helps.

Dan> Also, can you confirm that the init script is actually being called?  It 
would be helpful to know how far things get before they break down.  Since you've 
said that *no* Tomcat logs get created, I would expect that things don't get very 
far.  Maybe add some logging / echo statements to see what does and doesn't run.
EB> Genius suggestion. I'm disappointed I didn't think about it. Turns out that 
it does try to start.
EB> cat /tmp/tomcat.log

Let's start Tomcat! ... because Tomcat rocks!
JAVA_HOME = /usr/java/jdk1.7.0_45
PATH = /usr/java/jdk1.7.0_45/bin:/sbin:/usr/sbin:/bin:/usr/bin
CATALINA_HOME = /usr/share/apache-tomcat-7.0.47
START requested!

EB> So it feels like that sudo command fails. However, I see nothing in 
/var/log/sudolog. Is sudo the issue?
EB> I was trying su in the script, but it complained about the account not 
having login enabled. sudo worked interactively, so I assumed that ought to work!
EB> I looked at adding jsvc, but I don't have a lot of control over channels 
that the machine is subscribed to, and that seems to be in the optional channel.
EB> I have (rhel6) a daemon command, and I had considered updating to use that, 
but the sudo works interactively so I stuck with that (if it ain't broke, right?)


This may be more of a *nix question than a tomcat question, but I thought I'd 
try here first since it is in the context of tomcat itself.

Thoughts? Suggestions?

Dan> Have you verified that user / permissions are set correct to run as a 
service?  Keep in mind that running as a service may be running Tomcat as a 
different user.
EB> I guess I'm not sure what you mean here. Apologies. However, I did chown -R 
tomcat:tomcat on the entire install. First start after that reminded me I needed to clean 
the logs out before expecting it to work :-) but I can now start this interactively using 
"sudo service tomcat start" and stop it, etc.
EB> Perhaps I should add that I was raised on Unix, including being schooled in 
Unix administration. It's been years, but I do have a decent amount of experience 
with Unix, shell scripting, etc. :-)

Dan> Sounds like you've got the general idea of what I was saying here.  Good 
to know how the permissions are set on the Tomcat directory.
EB> Awesome :-) yes, I

Dan


Dan

I have Google'd myself to death! I'm at my wits end! I'm honestly at the point 
of thinking about punting this issue until another day or possibly resigning to 
making sure that any workflow which involves a server reboot includes a step 
for starting tomcat (yuck!).

Thanks in advance for any input!

Eddie

. . . . just my two cents
/mde/

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to