Start WildFly as a systemd Service on Linux

From NovaOrdis Knowledge Base
Jump to navigation Jump to search

Internal

Overview

We create a simple systemd Type=oneshot unit file that delegates the work of starting and stopping the instance to the System V wrappers shipped with EAP installation bundle. Note that em applies all this configuration automatically.

systemd File Locations

We adapted the installation procedure after an ActiveMQ installation procedure that recommended placing files in /usr/lib/systemd/scripts and /usr/lib/systemd/system. However, a better location seems to be /etc/systemd/... More research is needed, the results will go here systemd Concepts#Unit_File_Location.

Install the Pre-Packaged System V Startup Scripts into Standard systemd Location

Copy the pre-packaged System V startup scripts (jboss-as-domain.sh, jboss-as-standalone.sh for EAP 6, jboss-eap-rhel.sh for EAP 7) from $JBOSS_HOME/bin/init.d into /usr/lib/systemd/scripts.

Perform the following operations as "root", re-name the scripts as indicated below.

For a standalone installation, name the script jboss.

cp $JBOSS_HOME/bin/init.d/jboss-as-standalone.sh  /usr/lib/systemd/scripts/jboss

For a domain installation, name the script jboss-host-controller, regardless of whether we're configuring to start the domain controller or a subordinate host controller. This is because on the domain controller host, the domain controller process and the host controller process coincide.

cp $JBOSS_HOME/bin/init.d/jboss-as-domain.sh  /usr/lib/systemd/scripts/jboss-host-controller

Customize the WildFly Startup Wrapper

Customize WildFly Startup Wrapper

Create the Unit File

Create the /usr/lib/systemd/system/jboss.service (or the /usr/lib/systemd/system/jboss-host-controller.service) unit file. Maintain the same nomenclature for consistency:


Modify the environment variables accordingly

[Unit]
Description=EAP Service
After=syslog.target network-online.target
Before=httpd.service

[Service]
Type=oneshot
ExecStart=/usr/lib/systemd/scripts/jboss-host-controller start
ExecStop=/usr/lib/systemd/scripts/jboss-host-controller stop
RemainAfterExit=yes
Environment="JAVA_HOME=/opt/java"
Environment="JBOSS_HOME=/opt/jboss"
Environment="JBOSS_USER=eap"
Environment="JBOSS_MODE=domain"

[Install]
WantedBy=multi-user.target

After and Before

The name of the target used in "After" and "Before" declarations may vary from system to system. For example, "network.taget" on some system may be "network-online.target" on other systems. You can query the targets with systemctl list-units.

Notify systemd of the existence of the new unit file

systemctl daemon-reload

Enable at Boot

systemctl enable jboss-host-controller.service

The Line that Starts The Process

WildFly - The Wrapper Script Line that Starts the Process