= Unix Daemon
:index-group: Unrevised
:jbake-date: 2018-12-05
:jbake-type: page
:jbake-status: published


Apache TomEE can be run as a daemon using the
http://commons.apache.org/daemon/jsvc.html[jsvc] tool from the
http://commons.apache.org/daemon[Apache Commons Daemon] project.

Source tarballs for `jsvc` are included with Tomcat and therefore can be
found in TomEE as well. These need to be compiled before jsvc can be
used.

== Building jsvc

First, we'll need to locate and unpack the
`commons-daemon-native.tar.gz`

[source,bash]
----
cd $TOMEE_HOME/bin
tar xzvf commons-daemon-native.tar.gz
cd commons-daemon-1.0.7-native-src/unix/
----

Note that the `commons-daemon-1.0.7-native-src` directory may have a
slightly different version number.

Second, we'll need to build the `jsvc` binary. Under a UNIX operating
system you will need:

* An ANSI-C compliant compiler (GCC is good)
* GNU Make
* A Java Platform 2 compliant SDK

You have to specify the `JAVA_HOME` of the SDK either with the
`--with-java=<dir>` parameter or set the `JAVA_HOME` environment to
point to your SDK installation. For example:

[source,properties]
----
./configure --with-java=/usr/java
----

or

[source,properties]
----
export JAVA_HOME
./configure
----

If your operating system is supported, configure will go through
cleanly, otherwise it will report an error (please send us the details
of your OS/JDK, or a patch against the sources). To build the binaries
and libraries simply do:

[source,java]
----
make
----

This will generate the executable file `jsvc`.

Finally, we'll want to set the execution bits and move the `jsvc` binary

[source,properties]
----
chmod 755 jsvc
mv jsvc $TOMEE_HOME/bin
----

Done!

As one script, the above might look like:

[source,bash]
----
cd $TOMEE_HOME/bin
tar xzvf commons-daemon-native.tar.gz
cd commons-daemon-1.0.7-native-src/unix/
./configure
make
chmod 755 jsvc
mv jsvc ../..
----

== Starting (unix)

[source,bash]
----
sudo "$TOMEE_HOME/bin/jsvc" -cp "$TOMEE_HOME/bin/bootstrap.jar:$TOMEE_HOME/bin/tomcat-juli.jar" \
    "-javaagent:$TOMEE_HOME/lib/openejb-javaagent.jar" -outfile "$TOMEE_HOME/logs/catalina.out" \
    -errfile "$TOMEE_HOME/logs/catalina.err" org.apache.catalina.startup.Bootstrap
----

== Starting (osx)

For a 64-bit JVM such as OSX Lion

[source,bash]
----
sudo arch -arch x86_64 "$TOMEE_HOME/bin/jsvc" -jvm server -cp "$TOMEE_HOME/bin/bootstrap.jar:$TOMEE_HOME/bin/tomcat-juli.jar" \
    "-javaagent:$TOMEE_HOME/lib/openejb-javaagent.jar" -outfile "$TOMEE_HOME/logs/catalina.out" \
    -errfile "$TOMEE_HOME/logs/catalina.err" org.apache.catalina.startup.Bootstrap
----

For a 32-bit JVM

[source,bash]
----
sudo arch -arch i386 "$TOMEE_HOME/bin/jsvc" -jvm server -cp "$TOMEE_HOME/bin/bootstrap.jar:$TOMEE_HOME/bin/tomcat-juli.jar" \
    "-javaagent:$TOMEE_HOME/lib/openejb-javaagent.jar" -outfile "$TOMEE_HOME/logs/catalina.out" \
    -errfile "$TOMEE_HOME/logs/catalina.err" org.apache.catalina.startup.Bootstrap
----

=== Note on formatting

Note that `\` at the end of each line is unix syntax to keep everything
effectively as one line and one command. The command is simply too long
to show as one line on a fixed width html page. The `\` can be removed
as long as the resulting command is one long line.

== Common Issues

Ensure your `$TOME_HOME` and `$JAVA_HOME` variables are set correctly.
You should see similar output with the following two commands

[source,bash]
----
mingus:~ 01:51:37
$ ls $TOMEE_HOME
LICENSE     RELEASE-NOTES   bin     endorsed    logs        webapps
NOTICE      RUNNING.txt conf        lib     temp        work

mingus:~ 01:51:46
$ ls $JAVA_HOME
bin bundle  lib man
----

The `jsvc -debug` option can also show useful information for
troubleshooting:

[source,java]
----
$TOMEE_HOME/bin/jsvc -debug
----

Note on OSX, `$JAVA_HOME` should be set to
`/System/Library/Frameworks/JavaVM.framework/Home`

== Further documentation

See also the full Apache Commons Daemon documentation for jsvc.

* http://commons.apache.org/daemon/jsvc.html
