Using launchd with Tomcat
The Tomcat standalone distribution ships with Tomcat. There is a mismatch between how launchd expects a daemon to behave, and how the default startup scripts for Tomcat operate:
- OS X’s launchd expects the process it starts to run forever, but ‘
catalina.sh start‘ starts the JVM to run Tomcat and then exits.
- Tomcat provides ‘
catalina.sh stop‘ to shut down Tomcat cleanly by connecting to a socket which Tomcat listens on, but launchd stops daemons by sending them a signal that kills the process immediately if no specific handling is included.
You will need a wrapper shell script and properties list to make launchd work with Tomcat.
Step 1. Add a Wrapper Shell Script
Add the following wrapper shell script to
The above shell script starts Tomcat and then waits for the process to complete, so launchd is happy that Tomcat is still running. The script also installs a signal handler, which calls the
shutdown() function to cleanly shut down Tomcat when launchd signals the script.
You can try this script manually: Start the script, watch Tomcat start, and then type ctrl-C and see Tomcat shut down cleanly. (Note that it will not shut down cleanly if Tomcat has not started yet. It takes a few seconds for Tomcat to start listening on the shutdown socket.)
Step 2. Add a launchd Property List
The launchd property list (
.plist) tells launchd how to start Tomcat.
Add the following plist file to
/Library/LaunchDaemons, which is the location for system-wide services which are not part of base OS X:
- Replace ‘
/Users/myname/conf/tomcat-6.0‘ with the path to your Tomcat installation. The string occurs four times in the above script.
- JAVA_HOME is set to use the default JDK. On OS X version 10.4.4, the default JDK is 1.4.2. You will need to change this value if you want to use a different version of Java. For example, if you want to use JDK 1.5, you will need to change JAVA_HOME to
- In the above script, we have specified ‘
root‘ as the
UserName. If necessary, change the UserName to the user you want Tomcat to run as.
Starting and Stopping Tomcat Manually
To start and stop Tomcat manually, use the following commands:
sudo launchctl load -w tomcat.plist
sudo launchctl unload -w tomcat.plist
- Make sure both files
tomcat.plisthave the necessary file privileges.
- Check the console logging and log file for any abnormalities.