s6: Use s6-svc -Dd to stop services

This allows us to get rid of the sleep call in the stop function. Also,
we set a configurable timeout value for stopping daemons.
This commit is contained in:
William Hubbs 2015-05-14 11:40:29 -05:00
parent ddce529c71
commit b79d058f16
3 changed files with 10 additions and 21 deletions

View File

@ -117,8 +117,9 @@ The path to the s6 service directory if you are monitoring this service
with S6. The default is /var/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_service_timeout_stop
The options to pass to s6-svwait when stopping the service via s6. The amount of time, in milliseconds, s6-svc should wait for the service
to go down when stopping the service. The default is 10000.
.It Ar start_stop_daemon_args .It Ar start_stop_daemon_args
List of arguments passed to start-stop-daemon when starting the daemon. List of arguments passed to start-stop-daemon when starting the daemon.
.It Ar command .It Ar command

View File

@ -33,22 +33,14 @@ supervisor=s6
Several other variables affect s6 services. They are documented on the Several other variables affect s6 services. They are documented on the
openrc-run man page, but I will list them here for convenience: openrc-run man page, but I will list them here for convenience:
s6_service_path - the path to the s6 service directory s6_service_path - the path to the s6 service directory. The default is
/var/svc.d/$RC_SVCNAME.
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. the service. If this is not set, s6-svwait will not be called.
The s6_service_path variable defaults to /var/svc.d/${RC_SVCNAME} if it s6_service_timeout_stop - the amount of time, in milliseconds, s6-svc
is not set in the service script. For example, if you want a service should wait for a service to go down when stopping.
script called /etc/init.d/foobar to use s6 to monitor its daemon, the s6
service should be the directory /var/svc.d/foobar.
See the documentation for s6 for more information about s6 service
directories.
The s6_svwait_options_* variables set command line options to pass to
s6-svwait when starting or stopping the s6 service. These can be very
useful for waiting for s6 services to signal when they are up, timing out
when an s6 service doesn't come up, etc.
This is very early support, so feel free to file bugs if you have This is very early support, so feel free to file bugs if you have
issues. issues.

View File

@ -31,11 +31,7 @@ s6_stop()
fi fi
s6_service_link="${RC_SVCDIR}/s6-scan/${s6_service_path##*/}" s6_service_link="${RC_SVCDIR}/s6-scan/${s6_service_path##*/}"
ebegin "Stopping ${name:-$RC_SVCNAME}" ebegin "Stopping ${name:-$RC_SVCNAME}"
s6-svc -d "${s6_service_link}" s6-svc -Dd -T ${s6_service_timeout_stop:-10000} "${s6_service_link}"
if [ -n "$s6_svwait_options_stop" ]; then
s6-svwait ${s6_svwait_options_stop} "${s6_service_link}"
fi
sleep 1.5
set -- $(s6-svstat "${s6_service_link}") set -- $(s6-svstat "${s6_service_link}")
[ "$1" = "down" ] [ "$1" = "down" ]
eend $? "Failed to stop $RC_SVCNAME" eend $? "Failed to stop $RC_SVCNAME"