#!/bin/bash # ### BEGIN INIT INFO # Provides: kube-addons # Required-Start: $local_fs $network $syslog kube-apiserver # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Kubernetes Addon Object Manager # Description: # Enforces installation of Kubernetes Addon Objects ### END INIT INFO # PATH should only include /usr/* if it runs after the mountnfs.sh script 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} KUBE_ADDONS_SH=/etc/kubernetes/kube-addons.sh # Define LSB log_* functions. # Depend on lsb-base (>= 3.2-14) to ensure that this file is present # and status_of_proc is working. . /lib/lsb/init-functions # # Function that starts the daemon/service # do_start() { # 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}" > ${DAEMON_LOG_FILE} 2>&1 } # # Function that stops the daemon/service # do_stop() { # 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}" do_start case "$?" in 0|1) log_end_msg 0 || exit 0 ;; 2) log_end_msg 1 || exit 1 ;; esac ;; stop) log_daemon_msg "Stopping ${DESC}" "${NAME}" do_stop case "$?" in 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}" ;; restart|force-reload) log_daemon_msg "Restarting ${DESC}" "${NAME}" do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; *) echo "Usage: ${SCRIPTNAME} {start|stop|status|restart|force-reload}" >&2 exit 3 ;; esac