Let Tomcat is download and installed under /opt/tomcat
.
Also, let tomcat
be a non-provileged user under which the server will be running.
We assume that we keep server's binaries under /opt/tomcat
and we will create a server instance named foo
under /var/tomcat/
(carrying its own conf
, logs
, webapps
, work
, lib
directories).
See also https://dzone.com/articles/running-multiple-tomcat.
Create a template service unit file at /etc/systemd/system/[email protected]
:
[Unit]
Description=Tomcat - instance %i
After=syslog.target network.target
[Service]
Type=forking
User=tomcat
Group=tomcat
WorkingDirectory=/var/tomcat/%i
Environment="JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"
Environment="CATALINA_PID=/var/tomcat/%i/run/tomcat.pid"
Environment="CATALINA_BASE=/var/tomcat/%i/"
Environment="CATALINA_HOME=/opt/tomcat/"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
#RestartSec=10
#Restart=always
[Install]
WantedBy=multi-user.target
Now, we can instantiate a service instance for our foo
tomcat instance:
systemctl daemon-reload
systemctl enable [email protected]
systemctl start [email protected]
The website @honsberg shared is still my go-to reference when dealing with Tomcat and systemd. It moved location to https://jdebp.uk/FGA/systemd-house-of-horror/tomcat.html. Here's the unit file:
Some variables are still defined in
/etc/default/tomcat
, but can be moved to the unit as well:Of course, this can be further improved but it's a good starting point.
@skloessel, @tacerus have you actually spent a few minutes to see what's inside
/opt/tomcat/bin/startup.sh
? That's where the horror is..