Repository: karaf Updated Branches: refs/heads/master 84b1981fe -> 6b81319b7
KARAF-4157: Provide system script templates to start karaf without service wrapper Project: http://git-wip-us.apache.org/repos/asf/karaf/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/f8d510f5 Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/f8d510f5 Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/f8d510f5 Branch: refs/heads/master Commit: f8d510f59e3453cd648b378c079c2231e9fd4bea Parents: 0de9818 Author: lburgazzoli <[email protected]> Authored: Tue Dec 1 14:59:55 2015 +0100 Committer: lburgazzoli <[email protected]> Committed: Thu Jan 14 13:57:09 2016 +0100 ---------------------------------------------------------------------- .../bin/contrib/karaf-service-template.conf | 17 ++ .../bin/contrib/karaf-service-template.init | 129 +++++++++++ .../contrib/karaf-service-template.init-debian | 223 +++++++++++++++++++ .../contrib/karaf-service-template.init-redhat | 142 ++++++++++++ .../contrib/karaf-service-template.solaris-smf | 76 +++++++ .../bin/contrib/karaf-service-template.systemd | 28 +++ .../resources/bin/contrib/karaf-service-win.exe | Bin 0 -> 59392 bytes .../resources/bin/contrib/karaf-service-win.xml | 46 ++++ .../resources/bin/contrib/karaf-service.sh | 144 ++++++++++++ .../base/src/main/resources/resources/bin/karaf | 35 ++- .../src/main/resources/resources/bin/karaf.bat | 26 ++- 11 files changed, 855 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/f8d510f5/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-template.conf ---------------------------------------------------------------------- diff --git a/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-template.conf b/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-template.conf new file mode 100644 index 0000000..abf103e --- /dev/null +++ b/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-template.conf @@ -0,0 +1,17 @@ +# +# Karaf Service +# +KARAF_SERVICE_PATH="${KARAF_SERVICE_PATH}" +KARAF_SERVICE_NAME="${KARAF_SERVICE_NAME}" +KARAF_SERVICE_LOG="${KARAF_SERVICE_LOG}" +KARAF_SERVICE_USER="${KARAF_SERVICE_USER}" +KARAF_SERVICE_GROUP="${KARAF_SERVICE_GROUP}" +KARAF_LOCKFILE="/var/lock/subsys/$KARAF_SERVICE_NAME" +KARAF_SERVICE_PIDFILE=${KARAF_SERVICE_PIDFILE} +# +# Karaf +# + +# +# User +# http://git-wip-us.apache.org/repos/asf/karaf/blob/f8d510f5/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-template.init ---------------------------------------------------------------------- diff --git a/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-template.init b/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-template.init new file mode 100644 index 0000000..6ba799e --- /dev/null +++ b/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-template.init @@ -0,0 +1,129 @@ +#!/bin/sh +# +# Karaf control script +# description: Karaf startup script +# processname: ${KARAF_SERVICE_NAME} +# pidfile: ${KARAF_SERVICE_PIDFILE} +# config: ${KARAF_SERVICE_CONF} +# + +# 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 + +if [ -r "${KARAF_SERVICE_CONF}" ]; then + . "${KARAF_SERVICE_CONF}" +else + echo "Error KARAF_SERVICE_CONF not defined" + exit -1 +fi + +if [ -z "$STARTUP_WAIT" ]; then + STARTUP_WAIT=30 +fi + +if [ -z "$SHUTDOWN_WAIT" ]; then + SHUTDOWN_WAIT=30 +fi + +prog=${KARAF_SERVICE_NAME} +currenttime=$(date +%s%N | cut -b1-13) + +do_start() { + echo "Starting $prog: " + if [ -f $KARAF_SERVICE_PIDFILE ]; then + read ppid < $KARAF_SERVICE_PIDFILE + if [ `ps -p $ppid 2> /dev/null | grep -c $ppid 2> /dev/null` -eq '1' ]; then + echo "$prog is already running" + return 1 + else + rm -f $KARAF_SERVICE_PIDFILE + fi + fi + + mkdir -p $(dirname $KARAF_SERVICE_LOG) + cat /dev/null > $KARAF_SERVICE_LOG + chown $KARAF_SERVICE_USER:$KARAF_SERVICE_GROUP $KARAF_SERVICE_LOG + + mkdir -p $(dirname $KARAF_SERVICE_PIDFILE) + chown $KARAF_SERVICE_USER:$KARAF_SERVICE_GROUP $(dirname $KARAF_SERVICE_PIDFILE) || true + + if [ ! -z "$KARAF_SERVICE_USER" ]; then + su - $KARAF_SERVICE_USER \ + -c " { $KARAF_SERVICE_PATH/bin/karaf daemon >> $KARAF_SERVICE_LOG 2>&1 & } ; echo \$! >| $KARAF_SERVICE_PIDFILE " + fi + + RETVAL=$? + return $RETVAL +} + +do_stop() { + echo $"Stopping $prog: " + count=0; + + if [ -f $KARAF_SERVICE_PIDFILE ]; then + read kpid < $KARAF_SERVICE_PIDFILE + let kwait=$SHUTDOWN_WAIT + + # Try issuing SIGTERM + su - $KARAF_SERVICE_USER -c $KARAF_SERVICE_PATH/bin/stop + until [ `ps -p $kpid 2> /dev/null | grep -c $kpid 2> /dev/null` -eq '0' ] || [ $count -gt $kwait ] + do + sleep 1 + let count=$count+1; + done + + if [ $count -gt $kwait ]; then + kill -9 $kpid + fi + fi + + rm -f $KARAF_SERVICE_PIDFILE + rm -f $KARAF_LOCKFILE +} + +do_status() { + if [ -f $KARAF_SERVICE_PIDFILE ]; then + read ppid < $KARAF_SERVICE_PIDFILE + if [ `ps -p $ppid 2> /dev/null | grep -c $ppid 2> /dev/null` -eq '1' ]; then + echo "$prog is running (pid $ppid)" + return 0 + else + echo "$prog dead but pid file exists" + return 1 + fi + fi + echo "$prog is not running" + return 3 +} + +case "$1" in + start) + do_start + ;; + stop) + do_stop + ;; + restart) + do_stop + do_start + ;; + status) + do_status + ;; + *) + ## If no parameters are given, print which are avaiable. + echo "Usage: $0 {start|stop|status|restart}" + exit 1 + ;; +esac http://git-wip-us.apache.org/repos/asf/karaf/blob/f8d510f5/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-template.init-debian ---------------------------------------------------------------------- diff --git a/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-template.init-debian b/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-template.init-debian new file mode 100644 index 0000000..4d2ddba --- /dev/null +++ b/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-template.init-debian @@ -0,0 +1,223 @@ +#!/bin/sh +# +# /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" +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 + mkdir -p $(dirname "$KARAF_SERVICE_PIDFILE") + chown $KARAF_SERVICE_USER:$KARAF_SERVICE_GROUP $(dirname "$KARAF_SERVICE_PIDFILE") || true + + # Console log + mkdir -p $(dirname "$KARAF_SERVICE_LOG") + cat /dev/null > "$KARAF_SERVICE_LOG" + chown $KARAF_SERVICE_USER:$KARAF_SERVICE_GROUP $(dirname "$KARAF_SERVICE_LOG") + 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" -- "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 $KARAF_SERVICE_PATH/bin/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" \ + --remove-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 $NAME status" + exit 4 + fi + ;; + *) + log_action_msg "Usage: $0 {start|stop|restart|status}" + exit 2 + ;; +esac + +exit 0 http://git-wip-us.apache.org/repos/asf/karaf/blob/f8d510f5/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-template.init-redhat ---------------------------------------------------------------------- diff --git a/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-template.init-redhat b/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-template.init-redhat new file mode 100644 index 0000000..2f75d0b --- /dev/null +++ b/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-template.init-redhat @@ -0,0 +1,142 @@ +#!/bin/sh +# +# Karaf control script +# +# chkconfig: - 80 20 +# description: Karaf startup script +# processname: ${KARAF_SERVICE_NAME} +# pidfile: ${KARAF_SERVICE_PIDFILE} +# config: ${KARAF_SERVICE_CONF} +# + +# Source function library. +. /etc/init.d/functions + +# Load Java configuration. +[ -r /etc/java/java.conf ] && . /etc/java/java.conf +export JAVA_HOME + +if [ -r "${KARAF_SERVICE_CONF}" ]; then + . "${KARAF_SERVICE_CONF}" +else + echo "Error KARAF_SERVICE_CONF not defined" + exit -1 +fi + +if [ -z "$STARTUP_WAIT" ]; then + STARTUP_WAIT=30 +fi + +if [ -z "$SHUTDOWN_WAIT" ]; then + SHUTDOWN_WAIT=30 +fi + +prog=${KARAF_SERVICE_NAME} +currenttime=$(date +%s%N | cut -b1-13) + +start() { + echo -n "Starting $prog: " + if [ -f $KARAF_SERVICE_PIDFILE ]; then + read ppid < $KARAF_SERVICE_PIDFILE + if [ `ps --pid $ppid 2> /dev/null | grep -c $ppid 2> /dev/null` -eq '1' ]; then + echo -n "$prog is already running" + failure + echo + return 1 + else + rm -f $KARAF_SERVICE_PIDFILE + fi + fi + + mkdir -p $(dirname $KARAF_SERVICE_LOG) + cat /dev/null > $KARAF_SERVICE_LOG + chown $KARAF_SERVICE_USER:$KARAF_SERVICE_GROUP $KARAF_SERVICE_LOG + + mkdir -p $(dirname $KARAF_SERVICE_PIDFILE) + chown $KARAF_SERVICE_USER:$KARAF_SERVICE_GROUP $(dirname $KARAF_SERVICE_PIDFILE) || true + + if [ ! -z "$KARAF_SERVICE_USER" ]; then + if [ -r /etc/rc.d/init.d/functions ]; then + daemon \ + --user="$KARAF_SERVICE_USER" \ + --pidfile="$KARAF_SERVICE_PIDFILE" \ + " { $KARAF_SERVICE_PATH/bin/karaf daemon >> $KARAF_SERVICE_LOG 2>&1 & } ; echo \$! >| $KARAF_SERVICE_PIDFILE " + else + su - $KARAF_SERVICE_USER \ + -c " { $KARAF_SERVICE_PATH/bin/karaf daemon >> $KARAF_SERVICE_LOG 2>&1 & } ; echo \$! >| $KARAF_SERVICE_PIDFILE " + fi + fi + + RETVAL=$? + echo + + if [ $RETVAL -eq 0 ]; then + touch $KARAF_LOCKFILE + fi + + return $RETVAL +} + +stop() { + echo -n $"Stopping $prog: " + count=0; + + if [ -f $KARAF_SERVICE_PIDFILE ]; then + read kpid < $KARAF_SERVICE_PIDFILE + let kwait=$SHUTDOWN_WAIT + + # Try issuing SIGTERM + su - $KARAF_SERVICE_USER -c $KARAF_SERVICE_PATH/bin/stop + until [ `ps --pid $kpid 2> /dev/null | grep -c $kpid 2> /dev/null` -eq '0' ] || [ $count -gt $kwait ] + do + sleep 1 + let count=$count+1; + done + + if [ $count -gt $kwait ]; then + kill -9 $kpid + fi + fi + + rm -f $KARAF_SERVICE_PIDFILE + rm -f $KARAF_LOCKFILE + + success + echo +} + +status() { + if [ -f $KARAF_SERVICE_PIDFILE ]; then + read ppid < $KARAF_SERVICE_PIDFILE + if [ `ps --pid $ppid 2> /dev/null | grep -c $ppid 2> /dev/null` -eq '1' ]; then + echo "$prog is running (pid $ppid)" + return 0 + else + echo "$prog dead but pid file exists" + return 1 + fi + fi + echo "$prog is not running" + return 3 +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart) + $0 stop + $0 start + ;; + status) + status + ;; + *) + ## If no parameters are given, print which are avaiable. + echo "Usage: $0 {start|stop|status|restart}" + exit 1 + ;; +esac http://git-wip-us.apache.org/repos/asf/karaf/blob/f8d510f5/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-template.solaris-smf ---------------------------------------------------------------------- diff --git a/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-template.solaris-smf b/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-template.solaris-smf new file mode 100644 index 0000000..6bea436 --- /dev/null +++ b/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-template.solaris-smf @@ -0,0 +1,76 @@ +<?xml version="1.0" ?> +<!DOCTYPE service_bundle + SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'> + +<service_bundle type="manifest" name="application/${KARAF_SERVICE_NAME}"> + <service version="1" type="service" name="application/${KARAF_SERVICE_NAME}"> + + <create_default_instance enabled='false' /> + <single_instance /> + + <dependency + restart_on="none" + type="service" + name="multi_user_dependency" + grouping="require_all"> + + <service_fmri value="svc:/milestone/multi-user"/> + </dependency> + + <method_context> + <method_credential user='${KARAF_SERVICE_USER}' group='${KARAF_SERVICE_GROUP}'/> + <method_environment> + <envvar name="JAVA_HOME" value="/usr/java"/> + </method_environment> + </method_context> + + <!-- *************************************************************** --> + <!-- STOP/START --> + <!-- *************************************************************** --> + + <exec_method + timeout_seconds="60" + type="method" + name="start" + exec="${KARAF_SERVICE_PATH}/bin/karaf daemon &"> + </exec_method> + + <exec_method + timeout_seconds="60" + type="method" + name="stop" + exec="${KARAF_SERVICE_PATH}/bin/stop"> + </exec_method> + + <!-- *************************************************************** --> + <!-- --> + <!-- *************************************************************** --> + + <!-- do not restart the service in case of errors --> + <property_group name='startd' type='framework'> + <propval name='duration' + type='astring' + value='transient'/> + <propval name='ignore_error' + type='astring' + value='core,signal'/> + </property_group> + + <stability value='Evolving' /> + + <template> + <common_name> + <loctext xml:lang="C"> + ${KARAF_SERVICE_NAME} + </loctext> + </common_name> + <description> + <loctext xml:lang="C"> + ${KARAF_SERVICE_NAME} + </loctext> + </description> + </template> + + </service> +</service_bundle> + http://git-wip-us.apache.org/repos/asf/karaf/blob/f8d510f5/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-template.systemd ---------------------------------------------------------------------- diff --git a/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-template.systemd b/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-template.systemd new file mode 100644 index 0000000..012ec02 --- /dev/null +++ b/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-template.systemd @@ -0,0 +1,28 @@ +[Unit] +Description=Karaf - ${KARAF_SERVICE_NAME} +After=syslog.target network.target + +[Service] +EnvironmentFile=${KARAF_SERVICE_CONF} +Environment="KARAF_OPTS=-Dkaraf.systemd.enabled=true" + +User=${KARAF_SERVICE_USER} +Group=${KARAF_SERVICE_GROUP} +PIDFile=${KARAF_SERVICE_PIDFILE} +ExecStart=${KARAF_SERVICE_PATH}/bin/karaf daemon +ExecStop=${KARAF_SERVICE_PATH}/bin/stop + +Restart=on-failure +RestartSec=5s +StartLimitInterval=60s +StartLimitBurst=3 + +SuccessExitStatus=0 143 + +LimitNOFILE=102642 + +#WatchdogSec=60 + +[Install] +WantedBy=multi-user.target + http://git-wip-us.apache.org/repos/asf/karaf/blob/f8d510f5/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-win.exe ---------------------------------------------------------------------- diff --git a/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-win.exe b/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-win.exe new file mode 100644 index 0000000..c6e8fc2 Binary files /dev/null and b/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-win.exe differ http://git-wip-us.apache.org/repos/asf/karaf/blob/f8d510f5/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-win.xml ---------------------------------------------------------------------- diff --git a/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-win.xml b/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-win.xml new file mode 100644 index 0000000..5b2f420 --- /dev/null +++ b/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service-win.xml @@ -0,0 +1,46 @@ +<!-- + 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. +--> +<service> + + <!-- + This script is provided as a template you can quckly customize by replacing + the following variables: + + KARAF_SERVICE_NAME + KARAF_SERVICE_PATH + --> + + <id>%KARAF_SERVICE_NAME%</id> + <name>%KARAF_SERVICE_NAME%</name> + <description>Apache Karaf %KARAF_SERVICE_NAME%</description> + + <!-- start --> + <executable>%KARAF_SERVICE_PATH%\bin\karaf.bat</executable> + <startargument>daemon</startargument> + + <!-- stop --> + <stopexecutable>%KARAF_SERVICE_PATH%\bin\karaf.bat</stopexecutable> + <stopargument>stop</stopargument> + <stoptimeout>10sec</stoptimeout> + + <!-- logging --> + <logpath>%KARAF_SERVICE_PATH%\data\log</logpath> + <log mode="roll-by-time"> + <pattern>yyyyMMdd</pattern> + </log> + +</service> http://git-wip-us.apache.org/repos/asf/karaf/blob/f8d510f5/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service.sh ---------------------------------------------------------------------- diff --git a/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service.sh b/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service.sh new file mode 100755 index 0000000..7929668 --- /dev/null +++ b/assemblies/features/base/src/main/resources/resources/bin/contrib/karaf-service.sh @@ -0,0 +1,144 @@ +#!/usr/bin/env bash +# +# 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. +# + +function usage { + cat <<-END >&2 + USAGE: $0 [-k KARAF_SERVICE_PATH] [-d KARAF_SERVICE_DATA] [-p KARAF_SERVICE_PIDFILE] [-n KARAF_SERVICE_NAME] [-e KARAF_ENV, ...] + -k KARAF_SERVICE_PATH # Karaf installation path + -d KARAF_SERVICE_DATA # Karaf data path (default to \${KARAF_SERVICE_PATH}/data) + -c KARAF_SERVICE_CONF # Karaf configuration file + -t KARAF_SERVICE_ETC # Karaf etc path (default to \${KARAF_SERVICE_PATH/etc} + -p KARAF_SERVICE_PIDFILE # Karaf pid path (default to \${KARAF_SERVICE_DATA}/\${KARAF_SERVICE_NAME}.pid) + -n KARAF_SERVICE_NAME # Karaf service name (default karaf) + -e KARAF_ENV # Karaf environment variable (can be repeated) + -u KARAF_SERVICE_USER # Karaf user + -g KARAF_SERVICE_GROUP # Karaf group (default \${KARAF_SERVICE_USER) + -l KARAF_SERVICE_LOG # Karaf console log (default to \${KARAF_SERVICE_DATA}/log/\${KARAF_SERVICE_NAME}-console.log) + -f KARAF_SERVICE_TEMPLATE # Template file to use + -h # this usage message +END + exit +} + +CONF_TEMPLATE="karaf-service-template.conf" +SYSTEMD_TEMPLATE="karaf-service-template.systemd" +INIT_REDHAT_TEMPLATE="karaf-service-template.init-redhat" +INIT_DEBIAN_TEMPLATE="karaf-service-template.init-debian" +SOLARIS_SMF_TEMPLATE="karaf-service-template.solaris-smf" + +################################################################################ +# +################################################################################ + +KARAF_ENV=() + +while getopts k:d:c:p:n:u:g:l:t:e:f:h opt +do + case $opt in + k) export KARAF_SERVICE_PATH=$OPTARG ;; + d) export KARAF_SERVICE_DATA=$OPTARG ;; + c) export KARAF_SERVICE_CONF=$OPTARG ;; + p) export KARAF_SERVICE_PIDFILE=$OPTARG ;; + n) export KARAF_SERVICE_NAME=$OPTARG ;; + u) export KARAF_SERVICE_USER=$OPTARG ;; + g) export KARAF_SERVICE_GROUP=$OPTARG ;; + l) export KARAF_SERVICE_LOG=$OPTARG ;; + t) export KARAF_SERVICE_ETC=$OPTARG ;; + f) export KARAF_SERVICE_TEMPLATE=$OPTARG ;; + e) KARAF_ENV+=($OPTARG) ;; + h|?) usage ;; + esac +done + +shift $(( $OPTIND - 1 )) + +if [[ ! $KARAF_SERVICE_PATH ]]; then + echo "Warning, KARAF_SERVICE_PATH is required" + usage +fi + +if [[ ! $KARAF_SERVICE_DATA ]]; then + export KARAF_SERVICE_DATA=${KARAF_SERVICE_PATH}/data +fi + +if [[ ! $KARAF_SERVICE_ETC ]]; then + export KARAF_SERVICE_ETC=${KARAF_SERVICE_PATH}/etc +fi + +if [[ ! $KARAF_SERVICE_CONF ]]; then + export KARAF_SERVICE_CONF=${KARAF_SERVICE_PATH}/etc/${KARAF_SERVICE_NAME}.conf +fi + +if [[ ! $KARAF_SERVICE_NAME ]]; then + export KARAF_SERVICE_NAME="karaf" +fi + +if [[ ! $KARAF_SERVICE_PIDFILE ]]; then + export KARAF_SERVICE_PIDFILE=${KARAF_SERVICE_DATA}/${KARAF_SERVICE_NAME}.pid +fi + +if [[ ! $KARAF_SERVICE_LOG ]]; then + export KARAF_SERVICE_LOG=${KARAF_SERVICE_DATA}/log/${KARAF_SERVICE_NAME}-console.log +fi + +if [[ ! $KARAF_SERVICE_USER ]]; then + export KARAF_SERVICE_USER="root" +fi + +if [[ ! $KARAF_SERVICE_GROUP ]]; then + export KARAF_SERVICE_GROUP=${KARAF_SERVICE_USER} +fi + +################################################################################ +# +################################################################################ + +function generate_service_descriptor { + perl -p -e 's/\$\{([^}]+)\}/defined $ENV{$1} ? $ENV{$1} : $&/eg' < $1 > $2 + perl -p -e 's/\$\{([^}]+)\}/defined $ENV{$1} ? $ENV{$1} : $&/eg' < ${CONF_TEMPLATE} > ${KARAF_SERVICE_CONF} + + for var in "${KARAF_ENV[@]}"; do + echo "${var}" >> ${KARAF_SERVICE_CONF} + done +} + +################################################################################ +# +################################################################################ + +if [[ ! $KARAF_SERVICE_TEMPLATE ]]; then + case $(uname | tr [:upper:] [:lower:]) in + sunos) + # smc vs initv + generate_service_descriptor $SOLARIS_SMF_TEMPLATE ${PWD}/${KARAF_SERVICE_NAME}.xml + ;; + linux) + if [ -d /run/systemd/system ]; then + generate_service_descriptor $SYSTEMD_TEMPLATE ${PWD}/${KARAF_SERVICE_NAME}.service + elif [ -f /etc/redhat-release ]; then + generate_service_descriptor $INIT_REDHAT_TEMPLATE ${PWD}/${KARAF_SERVICE_NAME} + chmod 755 ${PWD}/${KARAF_SERVICE_NAME} + elif [ -f /etc/debian-release ]; then + generate_service_descriptor $INIT_DEBIAN_TEMPLATE ${PWD}/${KARAF_SERVICE_NAME} + chmod 755 ${PWD}/${KARAF_SERVICE_NAME} + fi + ;; + esac +else + generate_service_descriptor $KARAF_SERVICE_TEMPLATE ${PWD}/${KARAF_SERVICE_NAME} +fi http://git-wip-us.apache.org/repos/asf/karaf/blob/f8d510f5/assemblies/features/base/src/main/resources/resources/bin/karaf ---------------------------------------------------------------------- diff --git a/assemblies/features/base/src/main/resources/resources/bin/karaf b/assemblies/features/base/src/main/resources/resources/bin/karaf index f2004c0..1a025ea 100755 --- a/assemblies/features/base/src/main/resources/resources/bin/karaf +++ b/assemblies/features/base/src/main/resources/resources/bin/karaf @@ -191,9 +191,9 @@ locateJava() { [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` fi - if [ "x$JAVA_HOME" = "x" ] && [ "$darwin" = "true" ]; then - JAVA_HOME="$(/usr/libexec/java_home -v 1.8)" - fi + if [ "x$JAVA_HOME" = "x" ] && [ "$darwin" = "true" ]; then + JAVA_HOME="$(/usr/libexec/java_home -v 1.8)" + fi if [ "x$JAVA" = "x" ] && [ -r /etc/gentoo-release ] ; then JAVA_HOME=`java-config --jre-home` fi @@ -324,6 +324,8 @@ setupDefaults() { #DEFAULT_JAVA_DEBUG_OPTS="-Xrunyjpagent" } + + init() { # Determine if there is special OS handling we must perform detectOS @@ -394,6 +396,12 @@ run() { OPTS="-Dkaraf.startLocalConsole=false -Dkaraf.startRemoteShell=true" shift ;; + 'daemon') + OPTS="-Dkaraf.startLocalConsole=false -Dkaraf.startRemoteShell=true" + KARAF_DAEMON="true" + KARAF_EXEC="exec" + shift + ;; 'client') OPTS="-Dkaraf.startLocalConsole=true -Dkaraf.startRemoteShell=false" shift @@ -425,7 +433,6 @@ run() { fi while true; do - # When users want to update the lib version of, they just need to create # a lib.next directory and on the new restart, it will replace the current lib directory. if [ -d ${KARAF_HOME}/lib.next ] ; then @@ -434,6 +441,12 @@ run() { mv -f "${KARAF_HOME}/lib.next" "${KARAF_HOME}/lib" fi + # Ensure the log directory exists + # We may need to have a place to redirect stdout/stderr + if [ ! -d "$KARAF_DATA/log" ]; then + mkdir -p "$KARAF_DATA/log" + fi + $KARAF_EXEC "$JAVA" $JAVA_OPTS \ -Djava.endorsed.dirs="${JAVA_ENDORSED_DIRS}" \ -Djava.ext.dirs="${JAVA_EXT_DIRS}" \ @@ -445,15 +458,21 @@ run() { -Dkaraf.restart.jvm.supported=true \ -Djava.io.tmpdir="$KARAF_DATA/tmp" \ -Djava.util.logging.config.file="$KARAF_BASE/etc/java.util.logging.properties" \ - $KARAF_OPTS $OPTS \ + $KARAF_SYSTEM_OPTS \ + $KARAF_OPTS \ + $OPTS \ -classpath "$CLASSPATH" \ $MAIN "$@" KARAF_RC=$? - if [ "$KARAF_RC" -eq 10 ]; then - echo "Restarting JVM..." + if [ $KARAF_DAEMON ] ; then + exit $KARAF_RC else - exit $KARAF_RC + if [ "$KARAF_RC" -eq 10 ]; then + echo "Restarting JVM..." + else + exit $KARAF_RC + fi fi done } http://git-wip-us.apache.org/repos/asf/karaf/blob/f8d510f5/assemblies/features/base/src/main/resources/resources/bin/karaf.bat ---------------------------------------------------------------------- diff --git a/assemblies/features/base/src/main/resources/resources/bin/karaf.bat b/assemblies/features/base/src/main/resources/resources/bin/karaf.bat index fde33c6..22e2fd5 100644 --- a/assemblies/features/base/src/main/resources/resources/bin/karaf.bat +++ b/assemblies/features/base/src/main/resources/resources/bin/karaf.bat @@ -283,6 +283,7 @@ if "%KARAF_PROFILER%" == "" goto :RUN if "%1" == "status" goto :EXECUTE_STATUS if "%1" == "console" goto :EXECUTE_CONSOLE if "%1" == "server" goto :EXECUTE_SERVER + if "%1" == "daemon" goto :EXECUTE_DAEMON if "%1" == "client" goto :EXECUTE_CLIENT if "%1" == "clean" goto :EXECUTE_CLEAN if "%1" == "debug" goto :EXECUTE_DEBUG @@ -307,6 +308,12 @@ if "%KARAF_PROFILER%" == "" goto :RUN shift goto :RUN_LOOP +:EXECUTE_DAEMON + SET OPTS=-Dkaraf.startLocalConsole=false -Dkaraf.startRemoteShell=true + SET KARAF_DAEMON=true + shift + goto :RUN_LOOP + :EXECUTE_CLIENT SET OPTS=-Dkaraf.startLocalConsole=true -Dkaraf.startRemoteShell=false shift @@ -350,9 +357,22 @@ if "%KARAF_PROFILER%" == "" goto :RUN -Djava.util.logging.config.file="%KARAF_BASE%\etc\java.util.logging.properties" ^ %KARAF_OPTS% %MAIN% %ARGS% - if ERRORLEVEL 10 ( - echo Restarting JVM... - goto EXECUTE + rem If KARAF_DAEMON is defined, auto-restart is bypassed and control given + rem back to the operating system + if defined "%KARAF_DAEMON%" ( + rem If Karaf has been started by winsw, the process can be restarted + rem by executing KARAF_DAEMON% restart! + rem https://github.com/kohsuke/winsw#restarting-service-from-itself + if defined "%WINSW_EXECUTABLE%" ( + if ERRORLEVEL 10 ( + echo Restarting ... + %KARAF_DAEMON% restart! + ) + ) else ( + if ERRORLEVEL 10 ( + echo Restarting JVM... + goto EXECUTE + ) ) rem # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
