From c5401a6d595a595ee16ee6aede55fb016b9cfdfd Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Wed, 17 Oct 2012 10:55:23 +0200 Subject: o Proper implementation of start, stop and status. --- .app/lib/app-conf | 10 ++++- .app/lib/app-operate | 17 +++++---- .app/lib/pid-method | 102 ++++++++++++++++++++++++++++++++++++++++++++------- 3 files changed, 106 insertions(+), 23 deletions(-) (limited to '.app/lib') diff --git a/.app/lib/app-conf b/.app/lib/app-conf index 29b74dd..6216d6f 100644 --- a/.app/lib/app-conf +++ b/.app/lib/app-conf @@ -7,9 +7,17 @@ get_conf() { local name=$2 local instance=$3 local key=$4 - local default=$5 + local default= local file=$BASEDIR/$name/$instance/current/etc/app.conf + shift 4 + + if [ $# -gt 0 ] + then + default=$1 + shift + fi + if [ ! -r $file ] then echo "$default" diff --git a/.app/lib/app-operate b/.app/lib/app-operate index 7789939..8c9692b 100644 --- a/.app/lib/app-operate +++ b/.app/lib/app-operate @@ -53,14 +53,15 @@ run_control() { set +x set -e - case $ret in - 0) - echo "Method ${method} completed successfully for $name/$instance" - ;; - *) - echo "Error running method ${method} for $name/$instance" - ;; - esac +# case $ret in +# 0) +# echo "Method ${method} completed successfully for $name/$instance" +# ;; +# *) +# echo "Error running method ${method} for $name/$instance" +# ;; +# esac + exit $ret ) } diff --git a/.app/lib/pid-method b/.app/lib/pid-method index b4a672e..15e85ff 100755 --- a/.app/lib/pid-method +++ b/.app/lib/pid-method @@ -1,8 +1,8 @@ -#!/bin/bash +#!/bin/bash -e -set -e +set -u -PID_FILE=$APPSH_BASEDIR/.app/var/pid/$name-$instance.pid +PID_FILE=$APPSH_BASEDIR/.app/var/pid/$APPSH_NAME-$APPSH_INSTANCE.pid . $APPSH_HOME/.app/lib/app-conf @@ -22,16 +22,90 @@ fi chmod +x "$bin" +PID= +if [ -r $PID_FILE ] +then + PID="`cat $PID_FILE`" +fi + +do_status() { + if [ -z "$PID" ] + then + echo stopped + else + if [ `ps -p "$PID" 2>/dev/null | wc -l` -gt 1 ] + then + echo running + else + echo crashed + fi + fi +} + +method_start() { + case `do_status` in + running) + echo "The application is already running as $PID." + exit 1 + ;; + esac + + $bin <&- 1<&- 2<&- & + PID=$! + echo "Application launched as $PID" + echo $PID > $PID_FILE + + return 0 +} + +method_stop() { + case `do_status` in + stopped) + echo "The application not running." + exit 1 + ;; + crashed) + echo "The application crashed. Was running as $PID" + # TODO: should this remove the PID file? + # That makes it possible to run "stop" to stop "status" from showing "crashed" + exit 1 + ;; + esac + + signal="-9" + echo -n "Sending kill $signal to $PID, waiting for shutdown: " + kill $signal $PID + + while [ "`do_status`" == "running" ] + do + sleep 1 + echo -n "." + done + + echo "OK" + rm -f $PID_FILE + return 0 +} + +method_status() { + case `do_status` in + running) + echo "$APPSH_NAME/$APPSH_INSTANCE is running as $PID" + ;; + stopped) + echo "$APPSH_NAME/$APPSH_INSTANCE is not running" + ;; + crashed) + echo "$APPSH_NAME/$APPSH_INSTANCE crashed. Was running as $PID" + ;; + esac +} + case "$APPSH_METHOD" in - start) - set -x - $bin & - ret=$? - pid=$! - echo "Application launched with PID=$pid" - echo $pid > $PID_FILE - ;; - *) - exit 1 - ;; + start) method_start ;; + stop) method_stop ;; + status) method_status ;; + *) exit 1 ;; esac + +exit $? -- cgit v1.2.3