aboutsummaryrefslogtreecommitdiff
path: root/sh/s6.sh
diff options
context:
space:
mode:
authorWilliam Hubbs <w.d.hubbs@gmail.com>2017-11-16 15:35:35 -0600
committerWilliam Hubbs <w.d.hubbs@gmail.com>2017-11-16 15:35:35 -0600
commite805c74d31113c75058d860588e83bca120decf6 (patch)
tree28aba9bddc93cf4a205bd769d3fc4991446873a0 /sh/s6.sh
parent318e87348168e37d78f433d3ff06288ad8ccf15c (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/s6.sh')
-rw-r--r--sh/s6.sh20
1 files changed, 19 insertions, 1 deletions
diff --git a/sh/s6.sh b/sh/s6.sh
index d1b9c103..33c478ad 100644
--- a/sh/s6.sh
+++ b/sh/s6.sh
@@ -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}"