Introduction

  • A startup and shutdown configuration can be used for Unix systems that is executed by systemd running for the root account.
  • There are a number of ways how of writing systemd service files - however, the sections below explain the best practices for use of systemd  with JS7 products.

Controller

Location of Service File

The following service file will be created when extracting the Controller instance from the downloaded archive:

  • controller/bin/controller.service-example

You can rename the file to controller.service (or to any other name with the extension .service) and move the file to one of the known locations for systemd unit files such as:

  • /usr/lib/systemd/system
  • /etc/systemd/system

When using JS7 - Automated Installation and Update then the systemd service file can be automatically created.

Controller Service File

The example file for the Controller daemon includes a number of placeholders that can be replaced as follows:

Example for Controller service file
[Unit]
Description=SOS JS7 Controller -id=controller
After=syslog.target
After=network.target

[Service]
# Optionally set JAVA_HOME environment variable if not specified with the Controller's Instance Start Script
# Environment="JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk/"
# Optionally set JAVA_OPTIONS
# Environment="JAVA_OPTIONS='-Xmx500m'"
Type=forking
KillMode=process
# default <JS7_CONTROLLER_PID_FILE_DIR> = <INSTALL_PATH>/var/logs
PIDFile=/var/sos-berlin.com/js7/controller/logs/controller.pid
ExecStart=/opt/sos-berlin.com/js7/controller/bin/controller_instance.sh start
ExecStartPost=/bin/sleep 1
ExecStop=/opt/sos-berlin.com/js7/controller/bin/controller_instance.sh stop
ExecReload=/opt/sos-berlin.com/js7/controller/bin/controller_instance.sh restart
User=js7
StandardOutput=journal+console
StandardError=journal+console
TimeoutStopSec=60
TasksMax=infinity

[Install]
WantedBy=multi-user.target


Explanations:

  • Environment="JAVA_HOME=..." Optionally the JAVA_HOME environment variable can be set to specify the location of the JVM. Alternatively this environment variable can be specified with
    • the Instance Start Script ./bin/controller_instance.sh of the Controller,
    • the profile, e.g. $HOME/.bashrc, of the user account that the Controller is operated for. Note that systemd will not run the user accounts' profile when switching to the user account.
    • If a JDK is used then specify the folder in which the JDK is installed.
    • If a JRE is used then specify the folder in which the JRE is installed.
  • Environment="JAVA_OPTIONS=..." Optionally set Java options, e.g. specify the heap size or debugging options, if not provided by the Controller's ./bin/controller_instance.sh Instance Start Script.
  • PIDFile=... The controller.pid PID file includes the process ID that is assigned when starting the Controller. If not otherwise specified by the Instance Start Script then the file will be located in the logs directory.
  • ExecStart, ExecStop, ExecReload The start, stop and restart operations for the Controller are performed by running the Controller's Instance Start Script.
  • User=js7 The example assumes that the Controller is operated with the js7 user account. If the JS7_USER environment variable is set from the Controller's Instance Start Script then the values have to match.

Agent

Location of Service File

The following file will be created when extracting the Agent from the downloaded archive:

  • agent/bin/agent.service-example

You can rename the file to agent.service (or to any other name with the extension .service) and move the file to one of the known locations for systemd unit files such as:

  • /usr/lib/systemd/system
  • /etc/systemd/system

When using JS7 - Automated Installation and Update then the systemd service file can be automatically created.

Agent Service File

The example file for the Agent daemon includes a number of placeholders that can be replaced as follows:

Example for Agent service file
[Unit]
Description=SOS JS7 Agent -port=4445
After=syslog.target
After=network.target

[Service]
# Optionally set JAVA_HOME environment variable if not specified with the Agent's Instance Start Script
# Environment="JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk/"
# Optionally set JAVA_OPTIONS
# Environment="JAVA_OPTIONS='-Xmx256m'"
Type=forking
KillMode=process
# default <JS7_AGENT_PID_FILE_DIR> = <INSTALL_PATH>/var_<JS7_AGENT_HTTP_PORT>/logs
PIDFile=/var/sos-berlin.com/js7/agent/logs/agent.pid
ExecStart=/opt/sos-berlin.com/js7/agent/bin/agent_4445.sh start
ExecStartPost=/bin/sleep 1
ExecStop=/opt/sos-berlin.com/js7/agent/bin/agent_4445.sh stop
ExecReload=/opt/sos-berlin.com/js7/agent/bin/agent_4445.sh restart
User=js7
StandardOutput=journal+console
StandardError=journal+console
TimeoutStopSec=60
TasksMax=infinity

[Install]
WantedBy=multi-user.target


Explanations:

  • Environment="JAVA_HOME=..." Optionally the JAVA_HOME environment variable can be set to specify the location of the JVM. Alternatively this environment variable can be specified e.g. with
    • the Instance Start Script ./bin/agent_<port>.sh of the Agent,
    • the profile, e.g. $HOME/.bashrc, of the user account that the Agent is operated for. Note that systemd will not run the user accounts' profile when switching to the user account.
    • If a JDK is used then specify the folder in which the JDK is installed.
    • If a JRE is used then specify the folder in which the JRE is installed.
  • Environment="JAVA_OPTIONS=..." Optionally set Java options, e.g. to specify the heap size or debugging options, if not provided by the Agent's ./bin/agent_<port>.sh Instance Start Script.
  • PIDFile=... The agent.pid PID file includes the process ID that is assigned when starting the Agent. if not otherwise specified by the Instance Start Script then the file is located in the logs directory.
  • ExecStart, ExecStop, ExecReload The start, stop and restart operations for the Agent are performed by running the Agent's Instance Start Script.
  • User=js7 The example assumes that the Agent is operated for the js7 user account. If the JS7_USER environment variable is set from the Agent's Instance Start Script then the values have to match.

JOC Cockpit

Location of Service File

  • The JOC Cockpit will start for the user account that is specified during installation. The JOC Cockpit jetty.sh start script will switch to this account independently of the fact that the start script is executed e.g.  by systemd using the root account.
  • A sample service file for use with systemd is to be found at ./bin/joc.service-example.

You can rename the file to joc.service (or to any other name with the extension .service) and move the file to one of the known locations for systemd unit files such as:

  • /usr/lib/systemd/system
  • /etc/systemd/system

When using JS7 - Automated Installation and Update then the systemd service file can be automatically created.

JOC Cockpit Service File

The example file for the JOC Cockpit daemon includes a number of paths that are populated by the installer:

Example for JOC Cockpit service file
[Unit]
Description=Jetty for SOS JS7 JOC Cockpit
After=syslog.target
After=network.target

[Service]
# Optionally set JAVA_HOME environment variable if necessary
# Environment="JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk"
# Optionally set JAVA_OPTIONS
# Environment="JAVA_OPTIONS='-Xmx500m'"
Type=forking
PIDFile=/var/sos-berlin.com/js7/joc/joc.pid
ExecStart=/opt/sos-berlin.com/js7/joc/jetty/bin/jetty.sh start
ExecStartPost=/bin/sleep 1
ExecStop=/opt/sos-berlin.com/js7/joc/jetty/bin/jetty.sh stop
ExecReload=/opt/sos-berlin.com/js7/joc/jetty/bin/jetty.sh restart
User=js7
StandardOutput=journal+console
StandardError=journal+console
SuccessExitStatus=143
TimeoutStopSec=60

[Install]
WantedBy=multi-user.target


Explanations:

  • Environment="JAVA_HOME=..." Optionally the JAVA_HOME environment variable can be set to specify the location of the JVM. Alternatively this environment variable can be specified with, for example:
    • the  ./bin/agent_<port>.sh Start Script of the Agent Instance,
    • the profile, e.g. $HOME/.bashrc, of the user account that the Agent is operated with. Note that systemd will not run the user accounts' profile when switching to the user account.
    • If a JDK is used then specify the folder in which the JDK is installed.
    • If a JRE is used then specify the folder in which the JRE is installed.
  • Environment="JAVA_OPTIONS=..." Optionally set Java options, e.g. to specify the heap size or debugging options, if not not provided by some other location such as /etc/default/joc.
  • PIDFile=... The joc.pid PID file includes the process ID that is assigned when starting JOC Cockpit. By default the file is located in the JETTY_BASE directory.
  • ExecStart, ExecStop, ExecReload The start, stop and restart operations for the Agent are performed by running the JOC Cockpit Start Script.
  • User=js7 The example assumes that the Agent is operated for the js7 user account. If the JS7_USER environment variable is set from the Agent's Instance Start Script then the values have to match.

Operation with systemd

How to apply systemd Service Files

The following commands have to be executed after storing a service file to one of the known locations for systemd service files:

Example for enabling JS7 components
# make systemd read changes to service files
systemctl daemon-reload

# make systemd create a startup/shutdown configuration
systemctl enable controller
systemctl enable agent
systemctl enable joc

Explanations:

  • Ensure that the  controller service name corresponds to the controller.service service file name.
  • For unique service names users can rename the service file, for example to js7_controller.service.
  • The command systemctl daemon-reload has to be re-executed after any later change to a service file.

How to run systemd Service Files

The following commands can be executed after saving a service file in one of the known locations for systemd service files:

Example for managing JS7 components
# start, stop, restart and get status information of the Controller
systemctl start controller
systemctl stop controller
systemctl restart controller
systemctl status controller

Explanations:

  • Ensure that the controller service name corresponds to the controller.service. service file name.
  • For unique service names users can rename the service file, for example to js7_controller.service.
  • The above examples apply similarly to the Agent and JOC Cockpit.