Start WildFly as a systemd Service on Linux: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
 
(17 intermediate revisions by the same user not shown)
Line 5: Line 5:
=Overview=
=Overview=


We create a simple <tt>systemd</tt> <tt>Type=oneshot</tt> unit file that delegates the work of starting and stopping the instance to the System V wrappers shipped with EAP installation bundle.  
We create a simple <tt>systemd</tt> <tt>Type=oneshot</tt> 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.


=<tt>systemd</tt> File Locations=
=<tt>systemd</tt> File Locations=


We adapted the installation procedure after an ActiveMQ installation procedure that recommended placing files in <tt>/usr/lib/systemd/scripts</tt> and <tt>/usr/lib/systemd/system</tt>. However, a better location seems to be <tt>/etc/systemd/...</tt> More research is needed, the results will go here [[systemd Concepts#Unit_File_Location]].
Place the newly created unit file in /usr/lib/systemd/system and the companion scripts in /usr/lib/systemd/scripts. For more details, see [[systemd Concepts#Unit_File_Location|systemd Unit File Location]].


=Install the Pre-Packaged System V Startup Scripts into Standard <tt>systemd</tt> Location=
=Install the Pre-Packaged System V Startup Scripts into Standard <tt>systemd</tt> Location=


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


Perform the following operations as "root", re-name the scripts as indicated below.
Perform the following operations as "root", re-name the scripts as indicated below.
Line 37: Line 37:
=Create the Unit File=
=Create the Unit File=


Create the <tt>/usr/lib/systemd/system/eap.service</tt> unit file:
Create the <tt>/usr/lib/systemd/system/jboss.service</tt> (or the  <tt>/usr/lib/systemd/system/jboss-host-controller.service</tt>) unit file. Maintain the same nomenclature for consistency:
 
{{Warn|Modify the environment variables JAVA_HOME, JBOSS_HOME , etc. to match your system's values.}}


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


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


[Install]
[Install]
Line 54: Line 61:
</pre>
</pre>


=The Line that Starts The Process=
==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|systemctl list-units]].
 
=Notify <tt>systemd</tt> of the existence of the new unit file=
 
<pre>
systemctl daemon-reload
</pre>
 
=Enable at Boot=


<pre>
<pre>
...
systemctl enable jboss-host-controller.service
su - $JBOSS_USER -c "LAUNCH_JBOSS_IN_BACKGROUND=1 JBOSS_PIDFILE=$JBOSS_PIDFILE $JBOSS_SCRIPT --domain-config=$JBOSS_DOMAIN_CONFIG --host-config=$JBOSS_HOST_CONFIG" 2>&1 > $JBOSS_CONSOLE_LOG &
...
</pre>
</pre>
=The Line that Starts The Process=
<blockquote style="background-color: #f9f9f9; border: solid thin lightgrey;">
:[[WildFly - The Wrapper Script Line that Starts the Process]]
</blockquote>

Latest revision as of 17:08, 28 June 2017

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

Place the newly created unit file in /usr/lib/systemd/system and the companion scripts in /usr/lib/systemd/scripts. For more details, see systemd 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 JAVA_HOME, JBOSS_HOME , etc. to match your system's values.

[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