diff options
author | William Hubbs <w.d.hubbs@gmail.com> | 2017-11-16 15:35:35 -0600 |
---|---|---|
committer | William Hubbs <w.d.hubbs@gmail.com> | 2017-11-16 15:35:35 -0600 |
commit | e805c74d31113c75058d860588e83bca120decf6 (patch) | |
tree | 28aba9bddc93cf4a205bd769d3fc4991446873a0 /sh | |
parent | 318e87348168e37d78f433d3ff06288ad8ccf15c (diff) |
s6 supervisor fixes
Add the ability to force-kill a service if it does not go down
successfully. Also, adjust the default wait time for an s6 service to go
down to 60 seconds.
Diffstat (limited to 'sh')
-rw-r--r-- | sh/s6.sh | 20 |
1 files changed, 19 insertions, 1 deletions
@@ -12,6 +12,20 @@ [ -z "${s6_service_path}" ] && s6_service_path="/var/svc.d/${RC_SVCNAME}" +_s6_force_kill() { + local pid + s6_service_link="${RC_SVCDIR}/s6-scan/${s6_service_path##*/}" + pid="${3%)}" + [ -z "${pid}" ] && return 0 + if kill -0 "${pid}" 2> /dev/null; then + ewarn "Sending DOWN & KILL for ${RC_SVCNAME}" + s6-svc -dk "${s6_service_link}" + sleep 1 + kill -0 "${pid}" 2>/dev/null && return 1 + fi + return 0 +} + s6_start() { if [ ! -d "${s6_service_path}" ]; then @@ -41,7 +55,11 @@ s6_stop() fi s6_service_link="${RC_SVCDIR}/s6-scan/${s6_service_path##*/}" ebegin "Stopping ${name:-$RC_SVCNAME}" - s6-svc -wD -d -T ${s6_service_timeout_stop:-10000} "${s6_service_link}" + s6-svc -d -wD -T ${s6_service_timeout_stop:-60000} "${s6_service_link}" + set -- $(s6-svstat "${s6_service_link}") + [ "$1" = "up" ] && + yesno "${s6_force_kill:-yes}" && + _s6_force_kill "$@" set -- $(s6-svstat "${s6_service_link}") [ "$1" = "down" ] eend $? "Failed to stop ${name:-$RC_SVCNAME}" |