Systemd and Upstart Services
Most linux servers that I use are either Debian based or RedHat based. A common task is adding daemon services. Suppose that we want to start a tomcat application on startup First we shall install tomcat
mkdir /opt/tomcat groupadd tomcat useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat wget http://apache.cc.uoc.gr/tomcat/tomcat-8/v8.0.33/bin/apache-tomcat-8.0.33.tar.gz tar xvf apache-tomcat-8.0.33.tar.gz mv apache-tomcat-8.0.33/* /opt/tomcat rm -r apache-tomcat-8.0.33 apache-tomcat-8.0.33.tar.gz cd /opt/tomcat chgrp -R tomcat conf chmod g+rwx conf chmod g+r conf/* chown -R tomcat work/ temp/ logs/
In case of Systemd we should add a tomcat.service file on /etc/systemd/system. The file /etc/systemd/system/tomcat.service shall contain
[Unit] Description=Apache Tomcat Web Application Container After=syslog.target network.target [Service] Type=forking Environment=JAVA_HOME=/usr/java/default Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid Environment=CATALINA_HOME=/opt/tomcat Environment=CATALINA_BASE=/opt/tomcat Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC' Environment='JAVA_OPTS=-Duser.timezone=UTC -Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom' ExecStart=/opt/tomcat/bin/startup.sh ExecStop=/bin/kill -15 $MAINPID User=tomcat Group=tomcat [Install] WantedBy=multi-user.target
I specified the script to start after syslog and network are enabled. As we can see systemd handles the tomcat as a daemon and kills the pid. With User and Group we specify the user and the group that the process should be run as. Systemd will handle the upstart process and kill it using the PID. To enable and run you have to issue
systemctl enable tomcat systemctl start tomcat
In case of upstart we should create a tomcat.conf file in /etc/init/. The content of /etc/init/tomcat.conf
description "Tomcat instance" author "Emmanouil Gkatziouras" respawn respawn limit 2 5 start on runlevel [2345] stop on runlevel [!2345] setuid tomcat setgid tomcat env CATALINA_HOME=/opt/tomcat script $CATALINA_HOME/bin/catalina.sh run end script post-stop script rm -rf $CATALINA_HOME/temp/* end script
It will start on run levels 2,3,4 or 5. The group and the user id to be executed would be tomcat. After tomcat is stopped the post script block will remove the temp files. Instead of starting the process inn the background as a daemon,, upstart will handle the process on the foreground. To start just issue
sudo initctl start tomcat
Reference: | Systemd and Upstart Services from our SCG partner Emmanouil Gkatziouras at the Systemd and Upstart Services blog. |