diff options
Diffstat (limited to '.app/lib/app-operate')
-rw-r--r-- | .app/lib/app-operate | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/.app/lib/app-operate b/.app/lib/app-operate new file mode 100644 index 0000000..fc0d63f --- /dev/null +++ b/.app/lib/app-operate @@ -0,0 +1,130 @@ +#!/bin/bash + +start_usage() { + if [ -n "$1" ] + then + echo "Error:" "$@" >&2 + fi + + echo "usage: $0 start -n name -i instance" >&2 + exit 1 +} + +stop_usage() { + if [ -n "$1" ] + then + echo "Error:" "$@" >&2 + fi + + echo "usage: $0 stop -n name -i instance" >&2 + exit 1 +} + +# TODO: set ulimit +# TODO: set umask +# TODO: change group newgrp/sg +method_start() { + run_control start_usage "start" "$@" +} + +method_stop() { + run_control stop_usage "stop" "$@" +} + +run_control() { + local usage=$0; shift + local method=$1; shift + local name + local instance + + while getopts "n:i:" opt + do + case $opt in + n) + name=$OPTARG + ;; + i) + instance=$OPTARG + ;; + \?) + $usage "Invalid option: -$OPTARG" + ;; + esac + done + + assert_is_instance $usage "$name" "$instance" + + ( + cd $name/$instance/current + + bin=`get_conf $BASEDIR $name $instance app.method` + + if [ -z "$bin" ] + then + bin=$BASEDIR/.app/lib/pid-method + fi + + if [ ! -x "$bin" ] + then + echo "Invalid executable: $bin" >&2 + exit 1 + fi + + e="`get_conf_in_group $BASEDIR $name $instance env`" + + # Set a default PATH which can be overridden by the application's settings + set +e + env -i \ + PATH=/bin:/usr/bin \ + $e \ + APPSH_METHOD=$method \ + APPSH_BASEDIR=$BASEDIR \ + APPSH_NAME=$name \ + APPSH_INSTANCE=$instance \ + $bin + local ret=$? + set +x + set -e + + case $ret in + 0) + echo "Application ${method}ed" + ;; + *) + echo "Error starting $name/$instance" + ;; + esac + ) +} + +method_operate_usage() { + if [ -n "$1" ] + then + echo "Error:" $@ >&2 + fi + + echo "usage: $0 operate <method>" >&2 + echo "" >&2 + echo "Available methods:" >&2 + echo " start" >&2 + echo " stop" >&2 + echo " restart" >&2 + echo " status" >&2 +} + +method_operate() { + if [ $# -gt 0 ] + then + method=$1 + shift + fi + + case "$method" in + start) method_start $first "$@" ;; + stop) method_stop $first "$@" ;; + status) method_status $first "$@" ;; + restart) method_restart $first "$@" ;; + *) method_operate_usage ;; + esac + exit $? +} |