mirror of https://github.com/k3s-io/k3s
Merge pull request #10611 from marekbiskup/addon-update-kill-children
Addon update kill childrenpull/6/head
commit
cabecc1271
|
@ -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
|
||||
|
|
|
@ -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}
|
||||
|
|
Loading…
Reference in New Issue