mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-05 10:19:50 +00:00
kill child processes of addon-update on stop
This commit is contained in:
parent
b33954c45e
commit
aa608258a6
@ -16,9 +16,9 @@
|
|||||||
PATH=/sbin:/usr/sbin:/bin:/usr/bin
|
PATH=/sbin:/usr/sbin:/bin:/usr/bin
|
||||||
DESC="Kubernetes Addon Object Manager"
|
DESC="Kubernetes Addon Object Manager"
|
||||||
NAME=kube-addons
|
NAME=kube-addons
|
||||||
DAEMON_LOG_FILE=/var/log/$NAME.log
|
DAEMON_LOG_FILE=/var/log/${NAME}.log
|
||||||
PIDFILE=/var/run/$NAME.pid
|
PIDFILE=/var/run/${NAME}.pid
|
||||||
SCRIPTNAME=/etc/init.d/$NAME
|
SCRIPTNAME=/etc/init.d/${NAME}
|
||||||
KUBE_ADDONS_SH=/etc/kubernetes/kube-addons.sh
|
KUBE_ADDONS_SH=/etc/kubernetes/kube-addons.sh
|
||||||
|
|
||||||
# Define LSB log_* functions.
|
# Define LSB log_* functions.
|
||||||
@ -34,9 +34,10 @@ KUBE_ADDONS_SH=/etc/kubernetes/kube-addons.sh
|
|||||||
#
|
#
|
||||||
do_start()
|
do_start()
|
||||||
{
|
{
|
||||||
${KUBE_ADDONS_SH} </dev/null >>${DAEMON_LOG_FILE} 2>&1 &
|
# use setsid to make sure the new daemon has its own group (I suppose
|
||||||
echo $! > ${PIDFILE}
|
# start-stop-daemon does create a process group, but let's stay on the
|
||||||
disown
|
# 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()
|
do_stop()
|
||||||
{
|
{
|
||||||
kill $(cat ${PIDFILE})
|
# start-stop-daemon is not used because we have to stop all children
|
||||||
rm ${PIDFILE}
|
# 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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
start)
|
start)
|
||||||
log_daemon_msg "Starting $DESC" "$NAME"
|
log_daemon_msg "Starting ${DESC}" "${NAME}"
|
||||||
do_start
|
do_start
|
||||||
case "$?" in
|
case "$?" in
|
||||||
0|1) log_end_msg 0 || exit 0 ;;
|
0|1) log_end_msg 0 || exit 0 ;;
|
||||||
@ -59,19 +84,19 @@ case "$1" in
|
|||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
stop)
|
stop)
|
||||||
log_daemon_msg "Stopping $DESC" "$NAME"
|
log_daemon_msg "Stopping ${DESC}" "${NAME}"
|
||||||
do_stop
|
do_stop
|
||||||
case "$?" in
|
case "$?" in
|
||||||
0|1) log_end_msg 0 ;;
|
0|1) log_end_msg 0 || exit 0 ;;
|
||||||
2) exit 1 ;;
|
2) log_end_msg 1 || exit 1 ;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
status)
|
status)
|
||||||
status_of_proc -p $PIDFILE $KUBE_ADDONS_SH $NAME
|
status_of_proc -p "${PIDFILE}" "${KUBE_ADDONS_SH}" "${NAME}"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
restart|force-reload)
|
restart|force-reload)
|
||||||
log_daemon_msg "Restarting $DESC" "$NAME"
|
log_daemon_msg "Restarting ${DESC}" "${NAME}"
|
||||||
do_stop
|
do_stop
|
||||||
case "$?" in
|
case "$?" in
|
||||||
0|1)
|
0|1)
|
||||||
@ -89,7 +114,7 @@ case "$1" in
|
|||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
|
echo "Usage: ${SCRIPTNAME} {start|stop|status|restart|force-reload}" >&2
|
||||||
exit 3
|
exit 3
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
@ -162,7 +162,11 @@ function wait-for-jobs() {
|
|||||||
local rv=0
|
local rv=0
|
||||||
local pid
|
local pid
|
||||||
for pid in $(jobs -p); do
|
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}"
|
log DB2 "pid ${pid} completed, current error code: ${rv}"
|
||||||
done
|
done
|
||||||
return ${rv}
|
return ${rv}
|
||||||
|
Loading…
Reference in New Issue
Block a user