1#!/bin/bash
2#
3# rundeckd    Startup script for the RunDeck Launcher install
4#   paramaters:
5#     - env vars: [RDECK_BASE, RDECK_PORT, RDECK_LAUNCHER]
6#     - standard RDECK_PORT values: [http: 4440, https: 4443]
7
8# RDECK_BASE must be set and exist
9[ -z "$RDECK_BASE" -o ! -d "$RDECK_BASE" ] && {
10    echo "RDECK_BASE not set or does not exist" ;
11    exit 1 ;
12}
13
14# Source installation profile
15. $RDECK_BASE/etc/profile
16
17# Get the Launcher Jar path
18[ -z "$RDECK_LAUNCHER" ] && {
19    # Defaults to location of first startup
20    RDECK_LAUNCHER='${rundeck.launcher.jar.location}'; #set by install
21}
22[ -r "$RDECK_LAUNCHER" ] || {
23    echo "RDECK_LAUNCHER not found: $RDECK_LAUNCHER"
24    exit 1;
25}
26
27echo_success() {
28    echo "[OK]"
29    return 0
30}
31
32echo_failure() {
33    echo "[FAILED]"
34    return 1
35}
36
37# lookup the server port from the tools config file
38RDECK_PORT=`awk '/framework.server.port/ {print $3}' $RDECK_BASE/etc/framework.properties`
39
40# set the ssl opts if https is configured
41SSL_OPTS=
42proto=$(awk '/framework.server.url = / {split($3, a, ":"); print a[1]}' $RDECK_BASE/etc/framework.properties)
43[ "${proto:-http}" == "https" ] && {
44   SSL_OPTS="-Drundeck.ssl.config=$RDECK_BASE/server/config/ssl.properties -Dserver.https.port=${RDECK_PORT:=4443}"
45}
46
47prog="rundeckd"
48LOG4J_CONFIG="${RDECK_BASE}/server/config/log4j2.properties"
49logging="-Dlogging.config=file:${LOG4J_CONFIG} -Dlog4j.configurationFile=${LOG4J_CONFIG}"
50rundeckd="${JAVA_HOME}/bin/java ${logging} ${RDECK_JVM} -Dserver.http.port=${RDECK_PORT:=4440} $SSL_OPTS -jar ${RDECK_LAUNCHER}"
51RETVAL=0
52PID_FILE=$RDECK_BASE/var/run/${prog}.pid
53LOK_FILE=$RDECK_BASE/var/lock/subsys/$prog
54servicelog=$RDECK_BASE/var/log/service.log
55
56[ -w $RDECK_BASE/var ] || {
57    echo "RDECK_BASE dir not writable: $RDECK_BASE"
58    exit 1 ;
59}
60
61mkdir -p $RDECK_BASE/var/run
62mkdir -p $RDECK_BASE/var/log
63mkdir -p $RDECK_BASE/var/lock/subsys
64
65start() {
66    RETVAL=0
67    printf "%s" "Starting $prog: "
68    [ -f $LOK_FILE -a -f $PID_FILE ] && {
69	echo_success; #already running
70	return $RETVAL
71    }
72    nohup $rundeckd >>$servicelog 2>&1 &
73    RETVAL=$?
74    PID=$!
75    echo $PID > $PID_FILE
76    if [ $RETVAL -eq 0 ]; then
77	touch $LOK_FILE
78	echo_success
79    else
80	echo_failure
81    fi
82    return $RETVAL
83}
84
85stop() {
86    RETVAL=0
87    printf "%s" "Stopping $prog: "
88    [ ! -f $PID_FILE ] && {
89	echo_success; #already stopped
90	return $RETVAL
91    }
92    PID=`cat $PID_FILE`
93    RETVAL=$?
94    [ -z "$PID" ] && {
95	echo_failure; #empty pid value"
96	return $RETVAL;
97    }
98    ps -p "$PID" >/dev/null 2>&1
99    if [ $? -eq 0 ]; then
100	kill $PID >/dev/null 2>&1
101	RETVAL=$?
102	[ $RETVAL -eq 0 ] || {
103	    echo_failure; # could not kill process
104	    return $RETVAL
105	}
106    fi
107    rm -f $PID_FILE; # Remove control files
108    rm -f $LOK_FILE
109    echo_success
110    return $RETVAL
111}
112
113status() {
114    RETVAL=0
115    printf "%s" "Status $prog: "
116    test -f "$PID_FILE"
117    RETVAL=$?
118    [ $RETVAL -eq 0 ] || {
119	echo "$prog is stopped";
120	return 3;
121    }
122    PID=`cat $PID_FILE`
123    ps -p "$PID" >/dev/null
124    RETVAL=$?
125    [ $RETVAL -eq 0 ] && {
126	echo "$prog is running (pid=$PID, port=$RDECK_PORT)"
127    } || {
128	echo "$prog dead but pid file exists"
129    }
130    return $RETVAL
131}
132
133case "$1" in
134    start)
135	start
136	;;
137    stop)
138	stop
139	;;
140    restart)
141	stop
142	start
143	;;
144    condrestart)
145	if [ -f $LOK_FILE ]; then
146	    stop
147	    start
148	fi
149	;;
150    status)
151	status $rundeckd
152	RETVAL=$?
153	;;
154    *)
155	echo $"Usage: $0 {start|stop|restart|condrestart|status}"
156	RETVAL=1
157esac
158
159exit $RETVAL
160