123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- #!/bin/sh
- # 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.
- #
- # /etc/init.d/${KARAF_SERVICE_NAME} -- startup script for Karaf
- #
- #
- ### BEGIN INIT INFO
- # Provides: ${KARAF_SERVICE_NAME}
- # Required-Start: $remote_fs $network
- # Required-Stop: $remote_fs $network
- # Should-Start: $named
- # Should-Stop: $named
- # Default-Start: 2 3 4 5
- # Default-Stop: 0 1 6
- # Short-Description: Karaf
- # Description: Provide Karaf startup/shutdown script
- ### END INIT INFO
- NAME=${KARAF_SERVICE_NAME}
- DESC=${KARAF_SERVICE_NAME}
- DEFAULT="/etc/default/$NAME"
- # Check privileges
- if [ `id -u` -ne 0 ]; then
- echo "You need root privileges to run this script"
- exit 1
- fi
- # Make sure karaf is started with system locale
- if [ -r /etc/default/locale ]; then
- . /etc/default/locale
- export LANG
- fi
- . /lib/lsb/init-functions
- if [ -r /etc/default/rcS ]; then
- . /etc/default/rcS
- fi
- # Overwrite settings from default file
- if [ -f "$DEFAULT" ]; then
- . "$DEFAULT"
- fi
- if [ -r "${KARAF_SERVICE_CONF}" ]; then
- . "${KARAF_SERVICE_CONF}"
- else
- echo "Error KARAF_SERVICE_CONF not defined"
- exit -1
- fi
- # Location of JDK
- if [ -n "$JAVA_HOME" ]; then
- export JAVA_HOME
- fi
- # Setup the JVM
- if [ -z "$JAVA" ]; then
- if [ -n "$JAVA_HOME" ]; then
- JAVA="$JAVA_HOME/bin/java"
- else
- JAVA="java"
- fi
- fi
- # Check karaf user
- id $KARAF_SERVICE_USER > /dev/null 2>&1
- if [ $? -ne 0 -o -z "$KARAF_SERVICE_USER" ]; then
- echo "User \"$KARAF_SERVICE_USER\" does not exist..." >&2
- exit 1
- fi
- # Check owner of KARAF_SERVICE_PATH
- if [ ! $(stat -L -c "%U" "$KARAF_SERVICE_PATH") = $KARAF_SERVICE_USER ]; then
- echo "The user \"$KARAF_SERVICE_USER\" is not owner of \"$KARAF_SERVICE_PATH\"" >&2
- exit 1
- fi
- # The amount of time to wait for startup
- if [ -z "$STARTUP_WAIT" ]; then
- STARTUP_WAIT=30
- fi
- # The amount of time to wait for shutdown
- if [ -z "$SHUTDOWN_WAIT" ]; then
- SHUTDOWN_WAIT=30
- fi
- # Helper function to check status of karaf service
- check_status() {
- pidofproc -p "$KARAF_SERVICE_PIDFILE" "$JAVA" >/dev/null 2>&1
- }
- case "$1" in
- start)
- echo "Starting $DESC" "$NAME"
- # PID file
- PID_PATH=$(dirname "$KARAF_SERVICE_PIDFILE")
- if [ ! -d "$PID_PATH" ]; then
- mkdir -p "$PID_PATH"
- fi
- chown $KARAF_SERVICE_USER:$KARAF_SERVICE_GROUP "$PID_PATH" || true
- # Console log
- LOG_PATH=$(dirname "$KARAF_SERVICE_LOG")
- if [ ! -d "$LOG_PATH" ]; then
- mkdir -p "$LOG_PATH"
- fi
- cat /dev/null > "$KARAF_SERVICE_LOG"
- chown $KARAF_SERVICE_USER:$KARAF_SERVICE_GROUP "$LOG_PATH"
- chown $KARAF_SERVICE_USER:$KARAF_SERVICE_GROUP "$KARAF_SERVICE_LOG"
- start-stop-daemon \
- --start \
- --user "$KARAF_SERVICE_USER" \
- --chuid "$KARAF_SERVICE_USER" \
- --chdir "$KARAF_SERVICE_PATH" \
- --pidfile "$KARAF_SERVICE_PIDFILE" \
- --make-pidfile \
- --exec "$KARAF_SERVICE_PATH/bin/$KARAF_SERVICE_EXECUTABLE" -- "daemon" \
- >> "$KARAF_SERVICE_LOG" 2>&1 &
- count=0
- launched=0
- until [ $count -gt $STARTUP_WAIT ]
- do
- sleep 1
- count=$((count + 1));
- if check_status; then
- launched=1
- break
- fi
- done
- if check_status; then
- log_end_msg 0
- else
- log_end_msg 1
- fi
- if [ $launched -eq 0 ]; then
- log_warning_msg "$DESC hasn't started within the timeout allowed"
- log_warning_msg "please review file \"$KARAF_SERVICE_LOG\" to see the status of the service"
- fi
- ;;
- stop)
- check_status
- status_stop=$?
- if [ $status_stop -eq 0 ]; then
- kwait=$SHUTDOWN_WAIT
- read kpid < "$KARAF_SERVICE_PIDFILE"
- log_daemon_msg "Stopping $DESC" "$NAME"
- children_pids=$(pgrep -P $kpid)
- su - $KARAF_SERVICE_USER \
- -c "export JAVA_HOME=$JAVA_HOME; \"$KARAF_SERVICE_PATH/bin/$KARAF_SERVICE_EXECUTABLE\" stop"
- count=0
- until [ `ps --pid $kpid 2> /dev/null | grep -c $kpid 2> /dev/null` -eq '0' ] || [ $count -gt $kwait ]
- do
- sleep 1
- count=$((count + 1));
- done
- if check_status; then
- start-stop-daemon \
- --stop \
- --quiet \
- --pidfile "$KARAF_SERVICE_PIDFILE" \
- --user "$KARAF_SERVICE_USER" \
- --retry=TERM/$SHUTDOWN_WAIT/KILL/5 \
- > /dev/null 2>&1
- if [ $? -eq 2 ]; then
- log_failure_msg "$DESC can't be stopped"
- exit 1
- fi
- fi
- for child in $children_pids; do
- /bin/kill -9 $child >/dev/null 2>&1
- done
- log_end_msg 0
- rm -rf "$KARAF_SERVICE_PIDFILE"
- elif [ $status_stop -eq 1 ]; then
- log_action_msg "$DESC is not running but the pid file exists, cleaning up"
- rm -f "$KARAF_SERVICE_PIDFILE"
- elif [ $status_stop -eq 3 ]; then
- log_action_msg "$DESC is not running"
- fi
- ;;
- restart)
- check_status
- status_restart=$?
- if [ $status_restart -eq 0 ]; then
- $0 stop
- fi
- $0 start
- ;;
- status)
- check_status
- status=$?
- if [ $status -eq 0 ]; then
- read pid < $KARAF_SERVICE_PIDFILE
- log_action_msg "$DESC is running with pid $pid"
- exit 0
- elif [ $status -eq 1 ]; then
- log_action_msg "$DESC is not running and the pid file exists"
- exit 1
- elif [ $status -eq 3 ]; then
- log_action_msg "$DESC is not running"
- exit 3
- else
- log_action_msg "Unable to determine $DESC status"
- exit 4
- fi
- ;;
- *)
- log_action_msg "Usage: $0 {start|stop|restart|status}"
- exit 2
- ;;
- esac
- exit 0
|