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.
This commit is contained in:
William Hubbs 2015-05-13 14:47:35 -05:00
parent c2abf4b436
commit e372f97beb
3 changed files with 21 additions and 19 deletions

View File

@ -114,7 +114,7 @@ in this release is S6 from Skarnet software. To use this, set
supervisor=s6. supervisor=s6.
.It Ar s6_service_path .It Ar s6_service_path
The path to the s6 service directory if you are monitoring this service The path to the s6 service directory if you are monitoring this service
with S6. The default is /etc/svc.d/${RC_SVCNAME}. with S6. The default is /var/svc.d/${RC_SVCNAME}.
.It Ar s6_svwait_options_start .It Ar s6_svwait_options_start
The options to pass to s6-svwait when starting the service via s6. The options to pass to s6-svwait when starting the service via s6.
.It Ar s6_svwait_options_stop .It Ar s6_svwait_options_stop

View File

@ -37,10 +37,10 @@ s6_service_path - the path to the s6 service directory
s6_svwait_options_start - the options to pass to s6-svwait when starting s6_svwait_options_start - the options to pass to s6-svwait when starting
s6_svwait_options_stop - the options to pass to s6-svwait when stopping. s6_svwait_options_stop - the options to pass to s6-svwait when stopping.
The s6_service_path variable defaults to /etc/svc.d/${RC_SVCNAME} if it The s6_service_path variable defaults to /var/svc.d/${RC_SVCNAME} if it
is not set in the service script. For example, if you want a service is not set in the service script. For example, if you want a service
script called /etc/init.d/foobar to use s6 to monitor its daemon, the s6 script called /etc/init.d/foobar to use s6 to monitor its daemon, the s6
service should be the directory /etc/svc.d/foobar. service should be the directory /var/svc.d/foobar.
See the documentation for s6 for more information about s6 service See the documentation for s6 for more information about s6 service
directories. directories.

View File

@ -2,7 +2,7 @@
# Copyright (c) 2015 William Hubbs <w.d.hubbs@gmail.com> # Copyright (c) 2015 William Hubbs <w.d.hubbs@gmail.com>
# Released under the 2-clause BSD license. # 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() s6_start()
{ {
@ -10,16 +10,17 @@ s6_start()
eerror "${s6_service_path} does not exist." eerror "${s6_service_path} does not exist."
return 1 return 1
fi fi
local rc s6_service_link="${RC_SVCDIR}/s6-scan/${s6_service_path##*/}"
ebegin "Starting ${name:-$RC_SVCNAME}" ebegin "Starting ${name:-$RC_SVCNAME}"
ln -sf "${s6_service_path}" "${RC_SVCDIR}"/s6-scan ln -sf "${s6_service_path}" "${s6_service_link}"
s6-svscanctl -an "${RC_SVCDIR}"/s6-scan s6-svc -u "${s6_service_link}"
rc=$?
if [ -n "$s6_svwait_options_start" ]; then if [ -n "$s6_svwait_options_start" ]; then
s6-svwait ${s6_svwait_options_start} "${s6_service_path}" s6-svwait ${s6_svwait_options_start} "${s6_service_link}"
rc=$?
fi 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() s6_stop()
@ -28,19 +29,20 @@ s6_stop()
eerror "${s6_service_path} does not exist." eerror "${s6_service_path} does not exist."
return 1 return 1
fi fi
local rc s6_service_link="${RC_SVCDIR}/s6-scan/${s6_service_path##*/}"
ebegin "Stopping ${name:-$RC_SVCNAME}" ebegin "Stopping ${name:-$RC_SVCNAME}"
rm -rf "${RC_SVCDIR}/s6-scan/${s6_service_path##*/}" s6-svc -d "${s6_service_link}"
s6-svscanctl -an "${RC_SVCDIR}"/s6-scan
rc=$?
if [ -n "$s6_svwait_options_stop" ]; then if [ -n "$s6_svwait_options_stop" ]; then
s6-svwait ${s6_svwait_options_stop} "${s6_service_path}" s6-svwait ${s6_svwait_options_stop} "${s6_service_link}"
rc=$?
fi 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_status()
{ {
s6-svstat "${s6_service_path}" s6_service_link="${RC_SVCDIR}/s6-scan/${s6_service_path##*/}"
s6-svstat "${s6_service_link}"
} }