Merge pull request #10611 from marekbiskup/addon-update-kill-children

Addon update kill children
pull/6/head
Victor Marmol 2015-07-09 21:09:58 -07:00
commit cabecc1271
2 changed files with 45 additions and 16 deletions

View File

@ -16,9 +16,9 @@
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Kubernetes Addon Object Manager"
NAME=kube-addons
DAEMON_LOG_FILE=/var/log/$NAME.log
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
DAEMON_LOG_FILE=/var/log/${NAME}.log
PIDFILE=/var/run/${NAME}.pid
SCRIPTNAME=/etc/init.d/${NAME}
KUBE_ADDONS_SH=/etc/kubernetes/kube-addons.sh
# Define LSB log_* functions.
@ -34,9 +34,10 @@ KUBE_ADDONS_SH=/etc/kubernetes/kube-addons.sh
#
do_start()
{
${KUBE_ADDONS_SH} </dev/null >>${DAEMON_LOG_FILE} 2>&1 &
echo $! > ${PIDFILE}
disown
# use setsid to make sure the new daemon has its own group (I suppose
# start-stop-daemon does create a process group, but let's stay on the
# safe side).
setsid start-stop-daemon --start --verbose --background --no-close --make-pidfile --pidfile "${PIDFILE}" --startas "${KUBE_ADDONS_SH}" </dev/null >> ${DAEMON_LOG_FILE} 2>&1
}
#
@ -44,14 +45,38 @@ do_start()
#
do_stop()
{
kill $(cat ${PIDFILE})
rm ${PIDFILE}
# start-stop-daemon is not used because we have to stop all children
# limitations:
# - stop does not work if the pid file is missing
# - stop does not work if the daemon process is missing (children will not
# be killed)
# This is sufficient - remaining processes will end after a while.
local pid
pid=$(cat "${PIDFILE}" 2> /dev/null)
if [[ $? != 0 ]]; then
return 1
fi
local pgrp
# find the process group for the service and kill entire group
# o - output format: pgpg - process group
pgrp=$(ps --no-headers --pid "${pid}" -o pgrp 2>/dev/null)
if [[ $? != 0 ]] || [[ "${pgrp}" == "" ]]; then
return 1
fi
pgrp=$(echo -e ${pgrp}) # strip whitespaces (that's why there are no quotes around pgrp)
# negative pid is for killing entire group
kill -- -${pgrp} 2> /dev/null
if [[ $? != 0 ]]; then
return 2
fi
rm -f "${PIDFILE}"
return
}
case "$1" in
start)
log_daemon_msg "Starting $DESC" "$NAME"
log_daemon_msg "Starting ${DESC}" "${NAME}"
do_start
case "$?" in
0|1) log_end_msg 0 || exit 0 ;;
@ -59,19 +84,19 @@ case "$1" in
esac
;;
stop)
log_daemon_msg "Stopping $DESC" "$NAME"
log_daemon_msg "Stopping ${DESC}" "${NAME}"
do_stop
case "$?" in
0|1) log_end_msg 0 ;;
2) exit 1 ;;
0|1) log_end_msg 0 || exit 0 ;;
2) log_end_msg 1 || exit 1 ;;
esac
;;
status)
status_of_proc -p $PIDFILE $KUBE_ADDONS_SH $NAME
status_of_proc -p "${PIDFILE}" "${KUBE_ADDONS_SH}" "${NAME}"
;;
restart|force-reload)
log_daemon_msg "Restarting $DESC" "$NAME"
log_daemon_msg "Restarting ${DESC}" "${NAME}"
do_stop
case "$?" in
0|1)
@ -89,7 +114,7 @@ case "$1" in
esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
echo "Usage: ${SCRIPTNAME} {start|stop|status|restart|force-reload}" >&2
exit 3
;;
esac

View File

@ -162,7 +162,11 @@ function wait-for-jobs() {
local rv=0
local pid
for pid in $(jobs -p); do
wait ${pid} || (rv=1; log ERR "error in pid ${pid}")
wait ${pid}
if [[ $? -ne 0 ]]; then
rv=1;
log ERR "error in pid ${pid}"
fi
log DB2 "pid ${pid} completed, current error code: ${rv}"
done
return ${rv}