aboutsummaryrefslogtreecommitdiff
path: root/libexec/app-operator-pid
diff options
context:
space:
mode:
Diffstat (limited to 'libexec/app-operator-pid')
-rwxr-xr-xlibexec/app-operator-pid119
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 $?