From 0fd804914b785ed81f351cc96832a215867333ee Mon Sep 17 00:00:00 2001 From: Stefan Paetow Date: Fri, 19 Sep 2014 16:41:46 +0100 Subject: [PATCH] Update tids.initd Revamped to use Adam B's method of 'double-forking'. Seems to function just as well. --- tids.initd | 103 ++++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 58 insertions(+), 45 deletions(-) diff --git a/tids.initd b/tids.initd index 5ccb25b..764ce1c 100644 --- a/tids.initd +++ b/tids.initd @@ -5,11 +5,13 @@ # Default-Stop: 0 1 2 4 6 # Required-Start: radiusd # Should-Start: $network -# Short-Description: start the trust router service -# Description: starts the trust router service for Moonshot +# Short-Description: Starts Moonshot TIDS +# Description: Starts the Moonshot Temporary ID Service ### END INIT INFO # chkconfig: - 89 11 -# description: start the trust router service +# +# description: Starts the Moonshot Temporary ID Service +# # Source function library. . /etc/init.d/functions @@ -19,62 +21,73 @@ usage() { echo "Usage: $0 {start|stop|status}" } -# -RADIUS_SERVER_IP="212.219.210.203" -RADIUS_SERVER_NAME="ms-idp.dev.ja.net" -TRUST_ROUTER_GSSNAME="trustrouter@apc.moonshot.ja.net" -TRUST_ROUTER_USER="trustrouter" -KEYFILE="/var/lib/trust_router/keys" +# Load the configuration +[ -f /etc/sysconfig/tids ] || exit 6 +. /etc/sysconfig/tids -# some variables -prog=tids -TIDS="/usr/bin/tids" -PIDFILE="/var/run/${prog}/${prog}.pid" -LOGFILE="/var/log/${prog}/${prog}.log" -TIDSCOMMAND="${TIDS} ${RADIUS_SERVER_IP} ${TRUST_ROUTER_GSSNAME} ${RADIUS_SERVER_NAME} ${KEYFILE}" +# Create the PID and LOG directories +[ -d ${TIDS_PIDDIR} ] || mkdir -p ${TIDS_PIDDIR} && chown ${TIDS_USER}:${TIDS_GROUP} ${TIDS_PIDDIR} +[ -d ${TIDS_LOGDIR} ] || mkdir -p ${TIDS_LOGDIR} && chown ${TIDS_USER}:${TIDS_GROUP} ${TIDS_LOGDIR} + +# Some variables +prog=/usr/bin/tids-wrapper +PIDFILE="${TIDS_PIDDIR}/tids.pid" +LOGFILE="${TIDS_LOGDIR}/tids.log" + +# Does the trust router and wrapper exist +[ -x /usr/bin/tids ] || exit 5 +[ -x /usr/bin/tids-wrapper ] || exit 5 + +[ -f ${LOGFILE} ] || touch ${LOGFILE} && chown ${TIDS_USER}:${TIDS_GROUP} ${LOGFILE} + +OPTIONS="${PIDFILE} ${LOGFILE} ${TIDS_SERVER_IP} ${TIDS_GSS_NAME} ${TIDS_SERVER_NAME} ${KEYFILE}" case "$1" in start) - if [ -e ${PIDFILE} ] ; then - pgrep -f "${TIDSCOMMAND}" && (echo "Error: tids already running" ; exit 1) || rm ${PIDFILE} - fi - [ -d /var/run/${prog} ] || mkdir /var/run/${prog} && chown ${TRUST_ROUTER_USER} /var/run/${prog} - [ -d /var/log/${prog} ] || mkdir /var/log/${prog} && chown ${TRUST_ROUTER_USER} /var/log/${prog} - su --shell=/bin/bash -c "echo \"$(date) starting tids\" | tee -a ${LOGFILE}" ${TRUST_ROUTER_USER} - su --shell=/bin/bash -c "unset DISPLAY; ${TIDSCOMMAND} >> ${LOGFILE} 2>&1 &" ${TRUST_ROUTER_USER} - retval=$? - if [ ${retval} -eq 0 ] ; then - PID=$(pgrep -f "${TIDSCOMMAND}") - echo ${PID} > $PIDFILE - su --shell=/bin/bash -c "echo \"$(date) running (pid ${PID})\" | tee -a ${LOGFILE}" ${TRUST_ROUTER_USER} + if [ -f ${PIDFILE} ] ; + then + OLD_PID=$(cat "${PIDFILE}") + if [ -d "/proc/${OLD_PID}" ] ; + then + echo "Error: TIDS already running" ; exit 1 + else + rm ${PIDFILE} + fi fi - exit $retval + + timestamp=$(date) + echo "${timestamp} Starting TIDS..." >> ${LOGFILE} + echo -n "Starting TIDS..." + daemon --user="${TIDS_USER}" --pidfile="{PIDFILE}" "${prog}" "${OPTIONS}" + echo + + exit $? ;; stop) - su --shell=/bin/bash -c "echo \"$(date) stopping tids\" | tee -a ${LOGFILE}" ${TRUST_ROUTER_USER} - pkill -f "${TIDSCOMMAND}" - sleep 2; - if [ -e ${PIDFILE} ] ; then - pkill -9 -f "${TIDSCOMMAND}" - sleep 2 - pgrep -f "${TIDSCOMMAND}" && echo "Error: failed to kill tids" || rm ${PIDFILE} + timestamp=$(date) + echo "${timestamp} Stopping TIDS..." >> ${LOGFILE} + echo -n "Stopping TIDS..." + + if [ -f "${PIDFILE}" ] ; + then + killproc -p "${PIDFILE}" "${prog}" + echo + else + echo "TIDS does not appear to be running..." fi exit $? ;; - #restart) - #su --shell=/bin/bash -c "echo \"$(date) restarting tids\" | tee -a ${LOGFILE}" ${TRUST_ROUTER_USER} - #stop - #start - #;; status) - PID=$(pgrep -f "${TIDSCOMMAND}") - if [ ${PID} ] ; then - echo "tids is running (pid ${PID})" + PID=$(cat "${PIDFILE}") + + if [ -d "/proc/${PID}" ] ; + then + echo "TIDS is running (pid ${PID})" else if [ -e ${PIDFILE} ] ; then - echo "tids appears to be dead but pid file exists" + echo "TIDS appears to be dead but its PID file exists" else - echo "tids appears to be stopped" + echo "TIDS appears to be stopped" fi fi exit 0 -- 2.1.4