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 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
时间: 2024-08-29 05:41:34

How to run OFBiz as a Service on linux的相关文章

How To Install WildFly as a Service on Linux

Installing WildFly as a service on Linux has multiple advantages like automatic start on system boot, convinient management with service command, better security and other. To install WildFly as a service on CentOS and other RPM-based Linux distribut

HowTo: Restart SSH Service under Linux / UNIX

How do I restart SSH service under Linux or UNIX operating systems? The command to restart ssh are as follows (you must login as root user): CentOS / RHEL / Fedora / Redhat Linux Restart SSH # /etc/init.d/sshd restartOR# service sshd restart Debian /

Python app in Azure App Service on Linux初探

使用Azure应用托管平台服务,可以为运维人员省去大量的基础服务器的管理工作,并且可以和Azure DevOps, GitHub, BitBucket, Docker Hub, Azure Container Registry等配合使用实现持续集成和持续部署.现阶段Global Azure也推出了Azure App Service on Linux 服务,用户可以托管他们的应用在Linux环境下,目前支持大多数开发语言和版本,对Python的支持处于public preview阶段,接下来我们做

《service》-“linux命令五分钟系列”之二

本原创文章属于<Linux大棚>博客. 博客地址为http://roclinux.cn. 文章作者为roc 希望您能通过捐款的方式支持Linux大棚博客的运行和发展.请见“关于捐款” == service命令,顾名思义,就是用于管理Linux操作系统中服务的命令. 1. 声明:这个命令不是在所有的linux发行版本中都有.主要是在redhat.fedora.mandriva和centos中. 2. 此命令位于/sbin目录下,用file命令查看此命令会发现它是一个脚本命令. 3. 分析脚本可知

Apache OFbiz service engine 源代码解读

上一篇看完了ofbiz entity engine,这篇再来过一下ofbiz的service engine.service engine层在设计模式的使用上跟entity engine有些相似,最典型的就是"业务代表"模式.service engine跟entity engine是紧密相关的,大部分的业务系统所要运行的服务都是跟关系数据库相关的. service engine对于服务编写的方式有着很广泛的"自由",你能够选择它内置引擎支持的不论什么一种方式来编写服务

Angular之Providers (Value, Factory, Service and Constant )

官方文档Providers Each web application you build is composed of objects that collaborate to get stuff done.(每一个web应用都是由一些对象“组装”成的,这些对象共同合作,来完成特定的任务)These objects need to be instantiated and wired together for the app to work.(这些对象需要被实例化,然后“组装”在一起来使web应用能

Creating a Linux Daemon (service) in Delphi

With the introduction of the Linux target for Delphi, a wide range of possibilities are opened up to Delphi developers, to create Linux server applications. Unfortunately there are currently a limited number of project types available from the RAD St

zyrpc service

// Compile: csc service.cs /r:Zyan.Communication.dll /r:Topshelf.dll // // Usage: //    service.exe            Run the console server //    service.exe install    Install the service (requires admin rights) //    service.exe start      Start the inst

如何利用mono把.net windows service程序迁移到linux上

How to migrate a .NET Windows Service application to Linux using mono? 写在最前:之所以用要把windows程序迁移到Linux上,主要是由于一些成本问题,这个就不多解释了. 如何把之前用.net写的windows服务程序迁移到linux上运行.答案是有很多种的,今天我只提一下mono(我只实验了mono,呵呵). 如何在Linux部署mono,并成功的运行.net程序,还请大家多多查询吧,我在这方面也只是搭建成功了,遇到的问