| #!/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-sun" |
| MEMIF="" |
| UMASK=002 |
| |
| . /lib/lsb/init-functions |
| if [ -e /etc/default/rcS ]; then |
| . /etc/default/rcS |
| fi |
| |
| if [ -e /etc/default/locale ]; then |
| . /etc/default/locale |
| export LANG |
| fi |
| |
| # allow local admin to change defaults |
| if [ -e "$DEFAULT" ]; then |
| . "$DEFAULT" |
| fi |
| umask $UMASK |
| |
| 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 -f "$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 |