aboutsummaryrefslogtreecommitdiff
path: root/sh/s6.sh
diff options
context:
space:
mode:
authorWilliam Hubbs <w.d.hubbs@gmail.com>2015-05-13 14:47:35 -0500
committerWilliam Hubbs <w.d.hubbs@gmail.com>2015-05-13 16:10:08 -0500
commite372f97bebd4866633ad56aa5d5b1ae59fa88118 (patch)
tree629f947f5d8817d305e0b48454024ae8c63e7778 /sh/s6.sh
parentc2abf4b436b8cca8ebed395ff08f5fdc546eadac (diff)
Fix the s6 handling
This changes the default s6 service directory to /var/svc.d, also it changes the code to work with the individual services instead of forcing a rescan when a service is started or stopped.
Diffstat (limited to 'sh/s6.sh')
-rw-r--r--sh/s6.sh34
1 files changed, 18 insertions, 16 deletions
diff --git a/sh/s6.sh b/sh/s6.sh
index 780beab2..01527b6d 100644
--- a/sh/s6.sh
+++ b/sh/s6.sh
@@ -2,7 +2,7 @@
# Copyright (c) 2015 William Hubbs <w.d.hubbs@gmail.com>
# Released under the 2-clause BSD license.
-[ -z "${s6_service_path}" ] && s6_service_path="/etc/svc.d/${RC_SVCNAME}"
+[ -z "${s6_service_path}" ] && s6_service_path="/var/svc.d/${RC_SVCNAME}"
s6_start()
{
@@ -10,16 +10,17 @@ s6_start()
eerror "${s6_service_path} does not exist."
return 1
fi
- local rc
+ s6_service_link="${RC_SVCDIR}/s6-scan/${s6_service_path##*/}"
ebegin "Starting ${name:-$RC_SVCNAME}"
- ln -sf "${s6_service_path}" "${RC_SVCDIR}"/s6-scan
- s6-svscanctl -an "${RC_SVCDIR}"/s6-scan
- rc=$?
+ ln -sf "${s6_service_path}" "${s6_service_link}"
+ s6-svc -u "${s6_service_link}"
if [ -n "$s6_svwait_options_start" ]; then
- s6-svwait ${s6_svwait_options_start} "${s6_service_path}"
- rc=$?
+ s6-svwait ${s6_svwait_options_start} "${s6_service_link}"
fi
- eend $rc "Failed to start $RC_SVCNAME"
+ sleep 1.5
+ set -- $(s6-svstat "${s6_service_link}")
+ [ "$1" = "up" ]
+ eend $? "Failed to start $RC_SVCNAME"
}
s6_stop()
@@ -28,19 +29,20 @@ s6_stop()
eerror "${s6_service_path} does not exist."
return 1
fi
- local rc
+ s6_service_link="${RC_SVCDIR}/s6-scan/${s6_service_path##*/}"
ebegin "Stopping ${name:-$RC_SVCNAME}"
- rm -rf "${RC_SVCDIR}/s6-scan/${s6_service_path##*/}"
- s6-svscanctl -an "${RC_SVCDIR}"/s6-scan
- rc=$?
+ s6-svc -d "${s6_service_link}"
if [ -n "$s6_svwait_options_stop" ]; then
- s6-svwait ${s6_svwait_options_stop} "${s6_service_path}"
- rc=$?
+ s6-svwait ${s6_svwait_options_stop} "${s6_service_link}"
fi
- eend $rc "Failed to stop $RC_SVCNAME"
+ sleep 1.5
+ set -- $(s6-svstat "${s6_service_link}")
+ [ "$1" = "down" ] && rm -fr "${s6_service_link}"
+ eend $? "Failed to stop $RC_SVCNAME"
}
s6_status()
{
- s6-svstat "${s6_service_path}"
+ s6_service_link="${RC_SVCDIR}/s6-scan/${s6_service_path##*/}"
+ s6-svstat "${s6_service_link}"
}