changeset 1050:2dc4ebc08a77

Add wrapper script/systemd unit file for agent. Reviewed-by: vanaltj, omajid Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2013-March/006033.html
author Severin Gehwolf <sgehwolf@redhat.com>
date Wed, 06 Mar 2013 10:48:34 +0100
parents 3f0416e9db80
children 77607020a4d3
files distribution/scripts/thermostat distribution/scripts/thermostat-agent-sysd distribution/systemd/thermostat-agent.service
diffstat 3 files changed, 177 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/distribution/scripts/thermostat	Fri Mar 08 14:28:35 2013 +0100
+++ b/distribution/scripts/thermostat	Wed Mar 06 10:48:34 2013 +0100
@@ -46,28 +46,29 @@
 export THERMOSTAT_HOME
 THERMOSTAT_LIBS="${THERMOSTAT_HOME}/libs"
 
-# all the various libraries we need, mainly external dependencies
-JCOMMON_JAR="${THERMOSTAT_LIBS}/jcommon.jar"
-MONGO_JAR="${THERMOSTAT_LIBS}/mongo.jar"
-BSON_JAR="${THERMOSTAT_LIBS}/bson.jar"
-JOPT_JAR="${THERMOSTAT_LIBS}/jopt-simple-4.3.jar"
+# need tools from the JVM
 TOOLS_JAR="@java.home@/../lib/tools.jar"
-NETTY_JAR="${THERMOSTAT_LIBS}/netty-3.2.4.Final.jar"
 
 # plus the main services we use and export
 SERVICE_CLASSPATH="${THERMOSTAT_LIBS}/*"
 SERVICE_NATIVE="${THERMOSTAT_LIBS}/native"
 
-THERM_DIR=${THERMOSTAT_LIBS}
-
 SERVICE_CLASSPATH="${TOOLS_JAR}:${SERVICE_CLASSPATH}"
 THERMOSTAT_MAIN="com.redhat.thermostat.main.Thermostat"
 
+function usage() {
+    echo "$0 [-J<java-opt>] [-Tbg PIDFILE] [THERMOSTAT_ARGS]" >&2
+    exit 1
+}
+
 # start parsing arguments, we intercept jvm arguments vs thermostat specific
 # arguments
 JAVA_ARGS=()
 ARGS=()
 
+RUN_IN_BG=0
+PID_FILE=""
+
 i=0
 j=0
 
@@ -77,16 +78,36 @@
     -J*)
         JAVA_ARGS[$i]="${1##-J}"
         i=$((i+1))
+        shift
+        ;;
+    -Tbg)
+        shift
+        RUN_IN_BG=1
+        PID_FILE="$1"
+        shift
         ;;
     *)
         ARGS[$j]="$1"
         j=$((j+1))
+        shift
         ;;
     esac
-    shift
 done
 
-# finally run thermostat
-${JAVA} "${JAVA_ARGS[@]}" -Djava.library.path=${SERVICE_NATIVE} -cp ${SERVICE_CLASSPATH} ${THERMOSTAT_MAIN} "${ARGS[@]}"
-exit $?
+# Finally run thermostat (optionally in the background)
+if [ $RUN_IN_BG -eq 1 ]; then
+    # The thermostat-agent-sysd script uses this.
+    if [ x"$PID_FILE" = "x" ]; then
+        usage 
+    else
+        ${JAVA} "${JAVA_ARGS[@]}" -Djava.library.path=${SERVICE_NATIVE} -cp ${SERVICE_CLASSPATH} ${THERMOSTAT_MAIN} "${ARGS[@]}" &
+        retval=$?
+        echo $! > $PID_FILE
+        retval=$(( $retval + $? ))
+    fi
+else
+    ${JAVA} "${JAVA_ARGS[@]}" -Djava.library.path=${SERVICE_NATIVE} -cp ${SERVICE_CLASSPATH} ${THERMOSTAT_MAIN} "${ARGS[@]}"
+    retval=$?
+fi
+exit $retval
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/distribution/scripts/thermostat-agent-sysd	Wed Mar 06 10:48:34 2013 +0100
@@ -0,0 +1,89 @@
+#!/bin/bash
+#
+# Copyright 2012, 2013 Red Hat, Inc.
+#
+# This file is part of Thermostat.
+#
+# Thermostat is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published
+# by the Free Software Foundation; either version 2, or (at your
+# option) any later version.
+#
+# Thermostat is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Thermostat; see the file COPYING.  If not see
+# <http://www.gnu.org/licenses/>.
+#
+# Linking this code with other modules is making a combined work
+# based on this code.  Thus, the terms and conditions of the GNU
+# General Public License cover the whole combination.
+#
+# As a special exception, the copyright holders of this code give
+# you permission to link this code with independent modules to
+# produce an executable, regardless of the license terms of these
+# independent modules, and to copy and distribute the resulting
+# executable under terms of your choice, provided that you also
+# meet, for each linked independent module, the terms and conditions
+# of the license of that module.  An independent module is a module
+# which is not derived from or based on this code.  If you modify
+# this code, you may extend this exception to your version of the
+# library, but you are not obligated to do so.  If you do not wish
+# to do so, delete this exception statement from your version.
+#
+#####################################################################
+#
+# for debugging
+#set -xv
+
+if [ $# -ne 1 ]; then
+    echo "usage: $0 {start|stop|restart}" >&2
+    exit 1
+fi
+
+if [ x"$THERMOSTAT_HOME" = x ] ; then
+    THERMOSTAT_HOME="@thermostat.home@"
+fi
+
+export THERMOSTAT_HOME
+THERMOSTAT_BIN="$THERMOSTAT_HOME/bin/thermostat"
+AGENT_PID_FILE="$THERMOSTAT_HOME/agent/run/thermostat-agent.pid"
+
+function start() {
+    if [ -e "$AGENT_PID_FILE" ]; then
+        echo "Agent already running. Use '$0 stop' to stop it." >&2
+        exit 1
+    fi
+    # This writes PID of java process to AGENT_PID_FILE
+    "$THERMOSTAT_BIN" -Tbg "$AGENT_PID_FILE" agent
+    exit $?
+}
+
+function stop() {
+    if [ -e "$AGENT_PID_FILE" ]; then
+        pid=$(cat "$AGENT_PID_FILE")
+        kill $pid
+        retval=$?
+        # cleanup pid
+        rm -rf "$AGENT_PID_FILE"
+        exit $retval
+    else
+        exit 1
+    fi
+}
+
+case "$1" in
+    start)
+        start
+        ;;
+    stop)
+        stop
+        ;;
+    restart)
+        stop
+        start
+        ;;
+esac
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/distribution/systemd/thermostat-agent.service	Wed Mar 06 10:48:34 2013 +0100
@@ -0,0 +1,55 @@
+#
+# Copyright 2012, 2013 Red Hat, Inc.
+#
+# This file is part of Thermostat.
+#
+# Thermostat is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published
+# by the Free Software Foundation; either version 2, or (at your
+# option) any later version.
+#
+# Thermostat is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Thermostat; see the file COPYING.  If not see
+# <http://www.gnu.org/licenses/>.
+#
+# Linking this code with other modules is making a combined work
+# based on this code.  Thus, the terms and conditions of the GNU
+# General Public License cover the whole combination.
+#
+# As a special exception, the copyright holders of this code give
+# you permission to link this code with independent modules to
+# produce an executable, regardless of the license terms of these
+# independent modules, and to copy and distribute the resulting
+# executable under terms of your choice, provided that you also
+# meet, for each linked independent module, the terms and conditions
+# of the license of that module.  An independent module is a module
+# which is not derived from or based on this code.  If you modify
+# this code, you may extend this exception to your version of the
+# library, but you are not obligated to do so.  If you do not wish
+# to do so, delete this exception statement from your version.
+#
+#####################################################################
+#
+# Unit file in order to be able to start
+# thermostat agent via systemd.
+#
+[Unit]
+Description=Thermostat agent service
+After=syslog.target network.target
+Documentation=http://icedtea.classpath.org/wiki/Thermostat/Packaging/SystemdServices
+
+[Service]
+Type=forking
+ExecStart=@thermostat.home@/bin/thermostat-agent-sysd start
+ExecStop=@thermostat.home@/bin/thermostat-agent-sysd stop
+PIDFile=@thermostat.home@/agent/run/thermostat-agent.pid
+User=@thermostat.system.user@
+Group=@thermostat.system.group@
+
+[Install]
+WantedBy=multi-user.target