How to run OFBiz as a Service on linux

简介: Windows See this specific guide: How to Run OFBiz as Windows Service with Java Service Wrapper  Linux Assuming your Linux distro uses some varia...

Windows

See this specific guide: How to Run OFBiz as Windows Service with Java Service Wrapper 

Linux

Assuming your Linux distro uses some variant of the System V Init framework to run its services, you can use the rc.ofbiz script inside the root OFBiz installation dir.  I HAVE NOT TESTED THIS SCRIPT.  In my own firm, we use our own custom-written script for various reasons.  But the rc.ofbiz script was written by David E. Jones so it is probably reasonable!   You may need to perform some of the commands below as root or via sudo, if you don't know what that means, please find out BEFORE you start hosting OFBiz on Linux!

1. Create a linux user dedicated to run OFBiz (should NOT be root, for many good reasons that I will not go into here).  This user should have full permissions over OFBiz installation dir and its subdir (for simplicity, in fact you could tune this).  Your commands will be SOMETHING LIKE...

useradd -m ofbiz
chown -R ofbiz /opt/ofbiz
chmod 700 /opt/ofbiz

 

2. Copy the rc.ofbiz script to the /etc/init.d directory, with the name ofbiz, so you end up with: /etc/init.d/ofbiz    .   For instance:

cp /opt/ofbiz/rc.ofbiz /etc/init.d/ofbiz



3. Edit the various variables at the top of the script to reflect your environment, for instance where OFBiz is installed, where your JVM is installed, etc. 
For Debian based distrib replace all "echo_" by "echo "
We may rather use the following snippet. But, as I'm not a Linux specialist, I let it here as an example for now... 

# detect the distribution:
if [ -f /etc/redhat-release -o -f /etc/fedora-release ] ; then
    DISTRIBUTION="redhat"
elif [ -f /etc/SuSE-release ] ; then
    DISTRIBUTION="suse"
elif [ -f /etc/debian_version ] ; then
    DISTRIBUTION="debian"
else DISTRIBUTION="debian" fi # Source function library. [ "$DISTRIBUTION" = "redhat" ] && . /etc/init.d/functions [ "$DISTRIBUTION" = "suse" ] && . /etc/rc.status if [ "$DISTRIBUTION" = "suse" ] ; then echo_success() { rc_status -v } echo_failure() { rc_status -v } success() { echo_success } failure() { echo_success } elif [ "$DISTRIBUTION" = "debian" ] ; then
    echo_success() {
        echo ok
    }
    echo_failure() {
        echo failed
    }
    success() {
        echo_success
    }
    failure() {
        echo_success
    }
fi

 

4. Give this script the correct permissions.  Here is a typical example.

chmod 700 /etc/init.d/ofbiz

 

5.  At this point, you should be able to test the script manually, via root or sudo.  If you execute the following command, OFBiz should stop (if it was already up), and then start again.  Bear in mind that this process can take between 10s and 3 minutes, depending on your macine!  If this command does not work, something is wrong, investigate the command output or OFBiz logs to find out what.

/etc/init.d/ofbiz restart

 

6. Finally, we are ready to tell our Operating system, to execute this script automatically at certain points during OS startup/shutdown.  How we do this depends on our specific Linux Distro.  I have only put instructions here for those distros I am familiar with.   A generic point is that it is IMPORTANT here that your OFBiz starts AFTER any services on which it depends.  Typically this is your DB server.  If you use MySQL for instance, and MySQL starts with sequence 20, then OFbiz must start with sequence 21 or higher.   Invert this logic for stopping.

RedHat/Fedora

6a. Edit the comment line in your /etc/init.d/ofbiz, starting with # chkconfig, to reflect specific runlevels at which to start your service, and the order in which to start it.  For instance the following says "start ofbiz in runlevels 2, 3, 4 and 5, at position 21.  At any other runlevels (ie 1 and 6), stop OFBiz in position 19."

# chkconfig: 2345 21 19

 

6b. Now execute the following command as root 

chkconfig --add ofbiz

 

Debian/Ubuntu

 6a. Execute the following commands as a user with sudo permissions (on a typical Ubuntu installation, this means a member of the admin group).  Do not omit the two dots in the second command, they are important.

sudo update-rc.d -f ofbiz remove
sudo update-rc.d ofbiz start 21 2 3 4 5 . stop 19 0 1 6 .

 

 6b. Alternative: Without proper shutdown the Ofbiz database can not be restartet anymore. So this /etc/init.d/ofbiz script is a mix of the Solaris script below, startofbiz.bat and a Linux startup/stop script. You might use the sysv-rc-conf package/ command to let it run in state 2, 3, 4, 5 as many other services/server do in Debian or Ubuntu.

The Solaris shell function ofbizprocs() does not work with bash. Instead simply executing the external program pgrep does the job here. You need to install the Debian or Ubuntu package procps in order to use pgrep.

#!/bin/bash -e

### BEGIN INIT INFO
# Provides:          ofbiz
# Required-Start:    $syslog $time $remote_fs
# Required-Stop:     $syslog $time $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: start Apache Ofbiz
# Description:       Debian init script for the Apache Ofbiz,
#                    the open source enterprise automation software 
### END INIT INFO
set -e
######################################################################
export JAVA_HOME=/usr/local/src/jdk1.6.0_18
export CLASSPATH=/usr/local/src/jdk1.6.0_18
export PATH=.:/usr/local/src/jdk1.6.0_18/bin:/bin:/usr/bin:/sbin:/usr/sbin
cd /var/www/Ofbiz/
######################################################################
export JAVA_BINARY=/usr/local/src/jdk1.6.0_18/bin/java
export JAVA=$JAVA_BINARY
OFBIZ_HOME=/var/www/Ofbiz/
OFBIZ_LOG=$OFBIZ_HOME/runtime/logs/console.log
OFBIZ_OUT=/tmp/OfbizOut
# JAVA_VMOPTIONS="-Duser.language=de" # JAVA_VMOPTIONS="-Xms768M -Xmx1024M -Duser.language=en" JAVA_ARGS="-jar ${OFBIZ_HOME}/ofbiz.jar" OFBIZ_USER=ofbiz ###################################################################### # shutdown settings ADMIN_PORT=10523 ADMIN_KEY="InsertYourOwnKeyHere!" # VM args ADMIN="-Dofbiz.admin.port=$ADMIN_PORT -Dofbiz.admin.key=$ADMIN_KEY" MEMIF="-Xms128M -Xmx512M" MISC="-Duser.language=de" VMARGS="$MEMIF $MISC $DEBUG $RMIIF $ADMIN" ###################################################################### # The original shell function ofbizprocs() does NOT work with bash. # Therefore simply executing the external program does the job here: ofbizprocs="pgrep -u ${OFBIZ_USER} java" # We need the Debian or Ubuntu package procps for this! start() { echo "Starting OFBiz: " echo "Testing running OFBiz: " if [ "$($ofbizprocs)" != "" ]; then echo "OFBiz is already running..." return 1 fi # All clear cd $OFBIZ_HOME umask 007 /bin/rm -f $OFBIZ_OUT $OFBIZ_LOG echo "Now really starting OFBiz: " su - $OFBIZ_USER \ -c "cd $OFBIZ_HOME && $JAVA_BINARY $VMARGS $JAVA_ARGS >$OFBIZ_OUT 2>>$OFBIZ_LOG &" echo "startup return value: " $? return $? } # Stop OFBiz stop() { echo -n "Stopping OFBiz: " if [ "$($ofbizprocs)" = "" ]; then echo "OFBiz is not running..." return 1 fi # All clear cd $OFBIZ_HOME umask 007 su - ofbiz \ -c "cd $OFBIZ_HOME && $JAVA_BINARY $VMARGS $JAVA_ARGS -shutdown >$OFBIZ_OUT 2>>$OFBIZ_LOG&" sleep 15 if [ "$($ofbizprocs)" != "" ]; then # Let's try to -TERM /bin/kill -TERM "$($ofbizprocs)" else return 0 fi sleep 10 if [ "$($ofbizprocs)" != "" ]; then # Let's try it the hard way! /bin/kill -9 "$($ofbizprocs)" else return 0 fi sleep 10 if [ "$($ofbizprocs)" != "" ]; then echo "Some processes could not be stopped:" echo "$($ofbizprocs)" echo "A possible solution is to try this command once more!" return 1 else return 0 fi } ###################################################################### . /lib/lsb/init-functions case "$1" in start) log_daemon_msg "Starting Apache Ofbiz" "ofbiz" start log_end_msg $? ;; stop) log_daemon_msg "Stopping deferred Apache Ofbiz" "ofbiz" stop log_end_msg $? ;; force-reload|restart) stop start ;; *) echo "Usage: /etc/init.d/atd {start|stop|restart|force-reload}"
    exit 1
    ;;
esac

exit 0

 

Solaris (at least v10)

To be adapted maybe, from a Christopher Snow's message on user ML

#!/bin/sh

JAVA_BINARY=/export/home/ofbiz/jdk1.6.0_13/bin/java
OFBIZ_HOME=/export/home/ofbiz/ofbiz
OFBIZ_LOG=$OFBIZ_HOME/runtime/logs/console.log

JAVA_VMOPTIONS="-Xms768M -Xmx1024M -Duser.language=en"
JAVA_ARGS="-jar ${OFBIZ_HOME}/ofbiz.jar"
OFBIZ_USER=ofbiz

ofbizprocs() {
    OFBIZ_PROCS=`pgrep -u ${OFBIZ_USER} java`
}

start() {
    echo "Starting OFBiz: "
    ofbizprocs
    if [ "$OFBIZ_PROCS" != "" ]; then echo "OFBiz is already running..." return 1 fi # All clear cd $OFBIZ_HOME umask 007 /bin/rm -f $OFBIZ_LOG su - ofbiz -c "cd $OFBIZ_HOME && $JAVA_BINARY $JAVA_VMOPTIONS $JAVA_ARGS >>$OFBIZ_LOG 2>>$OFBIZ_LOG&" echo "startup return value: " $? return 0 } # Stop OFBiz stop() { echo -n "Stopping OFBiz: " ofbizprocs if [ "$OFBIZ_PROCS" = "" ]; then echo "OFBiz is not running..." return 1 fi # All clear cd $OFBIZ_HOME umask 007 su - ofbiz -c "cd $OFBIZ_HOME && $JAVA_BINARY $JAVA_VMOPTIONS $JAVA_ARGS -shutdown >>$OFBIZ_LOG" ofbizprocs if [ "$OFBIZ_PROCS" != "" ]; then # Let's try to -TERM /bin/kill -TERM $OFBIZ_PROCS fi ofbizprocs if [ "$OFBIZ_PROCS" != "" ]; then # Let's try it the hard way! /bin/kill -9 $OFBIZ_PROCS fi ofbizprocs if [ "$OFBIZ_PROCS" != "" ]; then echo "Some processes could not be stopped:" echo $OFBIZ_PROCS echo "A possible solution is to try this command once more!" return 1 else return 0 fi } case "$1" in 'start') start ;; 'stop') stop ;; 'restart') stop start ;; 'status') ofbizprocs if [ "$OFBIZ_PROCS" = "" ]; then echo "OFBiz is stopped" exit 1 else echo "OFBiz is running" exit 0 fi ;; *) echo "Usage: $0 {start|stop|kill|restart|status|help}"
        exit 1
    ;;
esac
echo
exit $?

7. Fire 'er up!

Let's test the fecker ! We need to restart the machine. Your distro may offer a graphical option for this but the standard unix command, to be executed via root or sudo, is the following.  Run it, wait a wee while, then try to login to your OFBiz from another machine on your LAN!

shutdown -r now

 

OS X (10.4+)

OS X 10.4+ uses the launchd daemon for startup services. Getting OFBiz to run as a server is really simple using this approach.

1. Create the org.apache.ofbiz.plist configuration file. A plist configuration file is nothing more than an XML file with the .plist extension. Use the sample script below (but be sure to change the WorkingDirectory property and create a file named org.apache.ofbiz.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Disabled</key>
        <false/> <key>Label</key> <string>org.apache.ofbiz</string> <key>WorkingDirectory</key> <string>/Users/jaz/Sandbox/ofbiz</string> <key>ProgramArguments</key> <array> <string>./startofbiz.sh</string> </array> <key>RunAtLoad</key> <true/>
</dict>
</plist>

You can change the RunAtLoad property if you want to stop OFBiz auto-starting.

2. To test the startup script you use launchctl. The following command will start OFBiz as the current user:

$ launchctl load org.apache.ofbiz.plist

You can view the status and process ID by running:

$ launchctl list | grep ofbiz

To unload the service after confirming it is working, run:

$ launchctl unload org.apache.ofbiz.plist

3. Deploy the startup script (assumes running as root):

$ sudo chown root:wheel org.apache.ofbiz.plist
$ sudo mv org.apache.ofbiz.plist /Library/LaunchDaemons/

You can now reboot and have OFBiz startup automatically. To load the script without rebooting you run the load command as root.

$ sudo launchctl load /Library/LaunchDaemons/org.apache.ofbiz.plist

4. To stop/start the process after it has been loaded either by rebooting or by running the load command you can run the following:
To Stop (note that the .plist is not specified for starting/stopping):

$ sudo launchctl stop org.apache.ofbiz

To Start

$ sudo launchctl start org.apache.ofbiz
目录
相关文章
|
25天前
|
资源调度 JavaScript Linux
【Azure 应用服务】本地Node.js部署上云(Azure App Service for Linux)遇到的三个问题解决之道
【Azure 应用服务】本地Node.js部署上云(Azure App Service for Linux)遇到的三个问题解决之道
|
25天前
|
应用服务中间件 Linux 网络安全
【Azure 应用服务】App Service for Linux 环境中为Tomcat页面修改默认的Azure 404页面
【Azure 应用服务】App Service for Linux 环境中为Tomcat页面修改默认的Azure 404页面
|
25天前
|
存储 Linux 开发工具
【Azure App Service】本地Git部署Python Flask应用上云(Azure App Service For Linux)关键错误
【Azure App Service】本地Git部署Python Flask应用上云(Azure App Service For Linux)关键错误
|
25天前
|
JSON Linux 网络安全
【Azure 应用服务】如何从App Service for Linux 的环境中下载Container中非Home目录下的文件呢?
【Azure 应用服务】如何从App Service for Linux 的环境中下载Container中非Home目录下的文件呢?
|
25天前
|
关系型数据库 MySQL Linux
【Azure 应用服务】在创建Web App Service的时候,选Linux系统后无法使用Mysql in App
【Azure 应用服务】在创建Web App Service的时候,选Linux系统后无法使用Mysql in App
【Azure 应用服务】在创建Web App Service的时候,选Linux系统后无法使用Mysql in App
|
25天前
|
存储 Linux 网络安全
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Linux/Linux Container)
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Linux/Linux Container)
|
25天前
|
JavaScript Linux
【Azure App Service for Linux】NodeJS镜像应用启动失败,遇见 RangeError: Incorrect locale information provided
【Azure App Service for Linux】NodeJS镜像应用启动失败,遇见 RangeError: Incorrect locale information provided
|
25天前
|
Kubernetes Linux Docker
【Azure 应用服务】使用Docker Compose创建App Service遇见"Linux Version is too long. It cannot be more than 4000 characters"错误
【Azure 应用服务】使用Docker Compose创建App Service遇见"Linux Version is too long. It cannot be more than 4000 characters"错误
|
25天前
|
Linux Docker 容器
【Azure 应用服务】使用App Service for Linux/Container时,如果代码或Container启动耗时大于了230秒,默认会启动失败。
【Azure 应用服务】使用App Service for Linux/Container时,如果代码或Container启动耗时大于了230秒,默认会启动失败。
|
25天前
|
Linux 应用服务中间件 网络安全
【Azure 应用服务】查看App Service for Linux上部署PHP 7.4 和 8.0时,所使用的WEB服务器是什么?
【Azure 应用服务】查看App Service for Linux上部署PHP 7.4 和 8.0时,所使用的WEB服务器是什么?