#!/bin/sh ### BEGIN INIT INFO # Provides: ofbiz # Required-Start: $local_fs $remote_fs $network $time # Required-Stop: $local_fs $remote_fs $network $time # Should-Start: postgresql mysql exim4 # Should-Stop: postgresql mysql exim4 # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: OfBiz container ### END INIT INFO #Licensed to the Apache Software Foundation (ASF) under one #or more contributor license agreements. See the NOTICE file #distributed with this work for additional information #regarding copyright ownership. The ASF licenses this file #to you under the Apache License, Version 2.0 (the #"License"); you may not use this file except in compliance #with the License. You may obtain a copy of the License at # #http://www.apache.org/licenses/LICENSE-2.0 # #Unless required by applicable law or agreed to in writing, #software distributed under the License is distributed on an #"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY #KIND, either express or implied. See the License for the #specific language governing permissions and limitations #under the License. set -e if ! [ -e "/usr/share/ofbiz/ofbiz.jar" ]; then exit 0 fi PATH=/bin:/usr/bin:/sbin:/usr/sbin # set defaults DEFAULT=/etc/default/ofbiz JAVA_HOME="" JAVA_HOMES="/usr/lib/jvm/java-6-openjdk" MEMIF="" UMASK=002 . /lib/lsb/init-functions . /etc/default/rcS if [ -e /etc/default/locale ]; then . /etc/default/locale export LANG fi # allow local admin to change defaults if [ -e "$DEFAULT" ]; then . "$DEFAULT" fi PATH=/bin:/usr/bin:/sbin:/usr/sbin NAME=ofbiz DESC="OfBiz Container" OFBIZ_HOME=/usr/share/ofbiz USER=ofbiz PIDFILE=/var/run/ofbiz.pid CLASS=org.ofbiz.base.start.Start PROPS="" if [ -f "/etc/ofbiz/debconf.cfg" ]; then PROPS="$PROPS -Dofbiz.system.props=/etc/ofbiz/debconf.cfg" fi if [ "x$JAVA_HOME" = x ]; then if [ "x$JAVA_HOMES" != x ]; then for possible in $JAVA_HOMES; do if [ -e "$possible/bin/java" ]; then JAVA_HOME="$possible" break fi done fi if [ "x$JAVA_HOME" = x ]; then log_failure_msg "Couldn't find a java." if [ "x$JAVA_HOMES" != x ]; then log_failure_msg "Tried $JAVA_HOMES" fi exit 1 fi fi JAVA="$JAVA_HOME/bin/java" CLASSPATH="$OFBIZ_HOME/ofbiz.jar:/usr/share/java/commons-daemon.jar" run_ofbiz_cmd() { ( cd "$OFBIZ_HOME" "$JAVA" $PROPS -jar ofbiz.jar "$1" ) } if [ -z "$(which jsvc)" ]; then jsvc() { jsvc_jvm="" jsvc_wait="" jsvc_verbose_class="" jsvc_verbose_gc="" jsvc_verbose_jni="" jsvc_pidfile="" jsvc_detach=1 jsvc_user="" jsvc_outfile="/dev/null" jsvc_errfile="/dev/null" jsvc_home="" jsvc_cp="" jsvc_extra="" jsvc_stop="" while [ $# -gt 0 ]; do case "$1" in (-version) ;; (-help) ;; (-?) ;; (-check) ;; (-jvm) jsvc_jvm="$2"; shift;; (-wait) jsvc_wait="$2"; shift;; (-stop) jsvc_stop=1;; (-verbose:class) jsvc_verbose_class=1; shift;; (-verbose:gc) jsvc_verbose_gc=1; shift;; (-verbose:jni) jsvc_verbose_jni=1; shift;; (-pidfile) jsvc_pidfile="$2"; shift;; (-nodetach) jsvc_detach="";; (-user) jsvc_user="$2"; shift;; (-outfile) jsvc_outfile="$2"; shift;; (-errfile) jsvc_errfile="$2"; shift;; (-home) jsvc_home="$2"; shift;; (-classpath) jsvc_cp="$2"; shift;; (-cp) jsvc_cp="$2"; shift;; (-D*) jsvc_extra="$jsvc_extra \"$1\"";; (-X*) jsvc_extra="$jsvc_extra \"$1\"";; (*) break;; esac shift done if ! [ "$jsvc_home" ]; then log_failure_msg "-home not set"; exit 1; fi if ! [ "$jsvc_cp" ]; then log_failure_msg "-cp not set"; exit 1; fi if [ "$jsvc_jvm" ]; then log_failure_msg "-jvm not supported"; exit 1; fi if [ "$jsvc_wait" ]; then log_failure_msg "-wait not supported"; exit 1; fi if [ "$jsvc_stop" ]; then log_failure_msg "-stop not supported"; exit 1; fi jsvc_args="" if [ "$jsvc_verbose_class" ]; then :; fi if [ "$jsvc_verbose_gc" ]; then :; fi if [ "$jsvc_verbose_jni" ]; then :; fi jsvc_command_file=$(mktemp) echo "#!/bin/sh" > "$jsvc_command_file" chmod +x "$jsvc_command_file" echo "rm -f \"$jsvc_command_file\"" >> "$jsvc_command_file" if [ "$jsvc_pidfile" ]; then touch "$jsvc_pidfile" if [ "$jsvc_user" ]; then chown "$jsvc_user" "$jsvc_pidfile" fi echo "echo \$\$ > \"$jsvc_pidfile\"" >> "$jsvc_command_file" fi echo "exec \"$JAVA\" -classpath \"$jsvc_cp\" $jsvc_extra $@" >> "$jsvc_command_file" if [ "$jsvc_user" ]; then chown "$jsvc_user" "$jsvc_command_file" jsvc_command="su -c \"$jsvc_command_file\" -s \"/bin/sh\" \"$jsvc_user\"" else jsvc_command="$jsvc_command_file" fi jsvc_command="$jsvc_command 1>\"$jsvc_outfile\" 2>\"$jsvc_errfile\"" if [ "$jsvc_detach" ]; then eval $jsvc_command & else trap "rm -f \"$jsvc_command_file\"" EXIT eval $jsvc_command fi return $? } fi get_status() { status="$(run_ofbiz_cmd -status 2>/dev/null | sed -n 's/^Current Status : //p')" case "$status" in (Running|Starting|Stopping|Not\ Running) echo $status ;; (*) echo Not Running ;; esac } wait_for_status() { count="$1" while :; do if [ "$(get_status)" = "$2" ]; then break; fi count=$(($count - 1)) if [ "$count" -eq 0 ]; then log_failure_msg "Timeout waiting for $3" exit 1 fi log_begin_msg "." sleep 1 done } ofbiz_shutdown() { run_ofbiz_cmd -shutdown >/dev/null } wait_for_stop() { wait_for_status 30 "Not Running" "stop" count="10" while :; do if ! start-stop-daemon --pidfile "$PIDFILE" --exec /usr/bin/jsvc --user $USER --signal 0 --quiet --stop; then break fi count=$(($count - 1)) if [ "$count" -eq 0 ]; then log_failure_msg "Timeout waiting for stop" exit 1 fi log_begin_msg "." sleep 1 done } start() { case "$(get_status)" in (Stopping) log_progress_msg "(waiting for stop" wait_for_stop log_progress_msg ")" ;; (Not\ Running) ;; (Starting|Running) log_progress_msg "(already running)" return ;; (*) log_progress_msg "(forcing stop" ofbiz_shutdown wait_for_stop log_progress_msg ")" ;; esac ( cd "$OFBIZ_HOME" touch /var/log/ofbiz/ofbiz.log chown ofbiz.ofbiz /var/log/ofbiz/ofbiz.log jsvc -pidfile "$PIDFILE" \ -user $USER \ -outfile /var/log/ofbiz/console.log -errfile '&1' \ -home "$JAVA_HOME" -cp "$CLASSPATH" \ $PROPS \ $MEMIF \ $CLASS ) wait_for_status 120 "Running" "start" } stop() { case "$(get_status)" in (Not\ Running) ;; (*) ofbiz_shutdown ;; esac wait_for_stop if [ -e "$PIDFILE" ]; then rm "$PIDFILE" fi } install() { case "$(get_status)" in (Stopping) log_progress_msg "(waiting for stop" wait_for_stop log_progress_msg ")" ;; (Not\ Running) ;; (Starting|Running) log_failure_msg "(running, can't install)" exit 1 ;; esac ( cd "$OFBIZ_HOME" touch /var/log/ofbiz/ofbiz.log chown ofbiz.ofbiz /var/log/ofbiz/ofbiz.log jsvc -pidfile "$PIDFILE" \ -nodetach \ -user $USER \ -outfile /dev/fd/3 -errfile '&1' \ -home "$JAVA_HOME" -cp "$CLASSPATH" \ $PROPS \ $MEMIF \ $CLASS \ install "$@" 3>&1 | \ tee -a /var/log/ofbiz/install.log ) } module_hook() { files="" result="0" while [ $# -gt 0 ]; do case "$1" in (-file=*) file="$(echo "$1" | sed 's/^-file=//')" if ! [ -e "$file" ]; then log_failure_msg "File $file does not exist" result=1 else files="$files,$file" fi ;; (-file) file="$2" if ! shift; then log_failure_msg "No file specified" result=1 elif ! [ -e "$file" ]; then log_failure_msg "File $file does not exist" result=1 else files="$files,$file" fi ;; (*) log_failure_msg "Unknown argument($1)" exit 1 ;; esac shift done if ! [ "$files" ]; then return 0 elif [ "$result" eq 1 ]; then return 1 fi files="$(echo "$files" | cut -f 2- -d ,)" was_running="" case "$(get_status)" in (Not\ Running) ;; (Stopping) wait_for_stop ;; (*) log_daemon_msg "Stopping $DESC" "$NAME" ofbiz_shutdown wait_for_stop log_end_msg 0 was_running=1 ;; esac cd "$OFBIZ_HOME" if ! jsvc \ -user $USER -outfile /dev/tty -errfile '&1' -nodetach \ -home "$JAVA_HOME" -cp "$CLASSPATH" \ $CLASS install -file="$files"; then log_failure_msg "Error installing files" result=1 fi if [ "$was_running" ]; then log_daemon_msg "Starting $DESC" "$NAME" start log_end_msg 0 fi return "$result" } cmd="$1" shift || true case "$cmd" in (start) log_daemon_msg "Starting $DESC" "$NAME" start log_end_msg 0 ;; (stop) log_daemon_msg "Stopping $DESC" "$NAME" stop log_end_msg 0 ;; (install) log_daemon_msg "Installing $DESC" "$NAME" install "$@" log_end_msg 0 ;; (reload|restart|force-reload) log_daemon_msg "Restarting $DESC" "$NAME" stop start log_end_msg 0 ;; (module-hook) if ! module_hook "$@"; then exit 1 fi ;; (*) log_success_msg "Usage: $0 {start|stop|install|reload|force-reload|restart" exit 1 ;; esac