From be42cc56daadba8dd32418c6c4fb064e5627ac7a Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Sat, 6 Oct 2012 10:00:37 +0200 Subject: o Adding a version of method_start() that work. --- .gitignore | 1 + app | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 106 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 83c7bbe..bb94a76 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ apps.list downloads /app-* target +.app diff --git a/app b/app index 5df385e..0be7fca 100755 --- a/app +++ b/app @@ -2,6 +2,9 @@ set -e +mkdir -p .app +export BASEDIR=`pwd` + if [ -n "$APPSH_REPO" ] then repo="$APPSH_REPO" @@ -62,11 +65,40 @@ download_artifact() { # TODO: download checksum. bash is too shady to trust } -get_config() { +get_conf() { key=$1 + default=$2 + + file=$BASEDIR/$name/$instance/latest/etc/app.conf + + if [ ! -r $file ] + then + echo "$default" + return 0 + fi - file=$name/$instance/latest/etc/app.conf value=`sed -n "s,^${key}[ ]*=[ ]*\(.*\)$,\1,p" $file` + + if [ -z "$value" ] + then + echo "$default" + fi + + echo "$value" +} + +get_conf_in_group() { + prefix=$1 + + file=$BASEDIR/$name/$instance/latest/etc/app.conf + + if [ ! -r $file ] + then + echo "$default" + return 0 + fi + + sed -n "s,^${prefix}\.\([._a-zA-Z]*\)[ ]*=[ ]*\(.*\)$,\1=\2,p" $file } install_usage() { @@ -206,7 +238,7 @@ method_install() { ( cd $name/$instance/latest - find bin | xargs chmod +x + find bin -type f | xargs chmod +x ) if [ -r apps.list ] @@ -217,11 +249,78 @@ method_install() { mv apps.list.new apps.list } +start_usage() { + if [ -n "$1" ] + then + echo "Error:" $@ >&2 + fi + + echo "usage: $0 start -n name -i instance" >&2 + exit 1 +} + +# TODO: set ulimit +# TODO: set umask +# TODO: change group newgrp/sg method_start() { -# TODO: set ulimit, newgrp/sg + while getopts "n:i:" opt + do + case $opt in + n) + name=$OPTARG + ;; + i) + instance=$OPTARG + ;; + \?) + start_usage "Invalid option: -$OPTARG" + ;; + esac + done + + if [ -z "$name" -o -z "$instance" ] + then + start_usage "Missing required option." + fi + + if [ ! -d $name/$instance ] + then + echo "No such application/instance: $name/$instance." >&2 + exit 1 + fi + + if [ ! -e $name/$instance/latest ] + then + echo "Missing 'latest' link." >&2 + exit 1 + fi + ( cd $name/$instance/latest - find bin | xargs chmod +x + + bin=`get_conf app.start` + + if [ -z "$bin" ] + then + bin=`find bin -type f` + + if [ ! -x "$bin" ] + then + echo "No app.start configured, couldn't detect an executable file to execute." >&2 + exit 1 + fi + elif [ ! -x "$bin" ] + then + echo "Invalid executable: $bin" >&2 + exit 1 + fi + + e=`get_conf_in_group env` + + env -i $e \ + $bin & + PID=`echo $!` + echo $PID > $BASEDIR/.app/$name-$instance.pid ) } @@ -251,7 +350,7 @@ method_list_config() { echo $default fi - get_value port + get_conf port } method_usage() { -- cgit v1.2.3