diff options
author | Trygve Laugstøl <trygvis@inamo.no> | 2013-01-27 19:41:28 +0100 |
---|---|---|
committer | Trygve Laugstøl <trygvis@inamo.no> | 2013-01-27 19:49:58 +0100 |
commit | 1e4a96730da70fcfa3b8c153874cbdebad0f9829 (patch) | |
tree | 9495f33f6b54621e0a684b553b64a6958744c1e3 /libexec/app-operator-pid | |
parent | e1daac32c5b7ca0d902c16135d361aa5303f5124 (diff) | |
download | app.sh-1e4a96730da70fcfa3b8c153874cbdebad0f9829.tar.gz app.sh-1e4a96730da70fcfa3b8c153874cbdebad0f9829.tar.bz2 app.sh-1e4a96730da70fcfa3b8c153874cbdebad0f9829.tar.xz app.sh-1e4a96730da70fcfa3b8c153874cbdebad0f9829.zip |
o Starting on a style guide.
app-conf: Adding 'import' command.
app-cat-conf: Adding support for multiple -f flags. The default files
can be switched off.
A file named "-" is the same as /dev/stdin.
app: Adding a way to enable debugging.
app-install-file: Import any configuration delivered with the package.
Diffstat (limited to 'libexec/app-operator-pid')
-rwxr-xr-x | libexec/app-operator-pid | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/libexec/app-operator-pid b/libexec/app-operator-pid new file mode 100755 index 0000000..a0ff097 --- /dev/null +++ b/libexec/app-operator-pid @@ -0,0 +1,119 @@ +#!/bin/bash -e + +#!/bin/bash + +set -e +set -u + +APPSH_HOME=$(cd $(dirname "$0")/.. && pwd) + +. $APPSH_HOME/lib/common +# HEADER END + +pid_file=$APPSH_APPS/.app/var/pid/$APPSH_NAME-$APPSH_INSTANCE.pid +bin=`get_conf $APPSH_APPS $APPSH_NAME $APPSH_INSTANCE app.bin` + +cd $APPSH_APPS/$APPSH_NAME/$APPSH_INSTANCE/current + +if [ -z "$bin" ] +then + echo "Missing required configuration: app.bin." >&2 + exit 1 +fi + +if [ ! -r "$bin" ] +then + echo "No such file: $bin" >&2 + exit 1 +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) method_start ;; + stop) method_stop ;; + status) method_status ;; + *) exit 1 ;; +esac + +exit $? |