From b79d058f162d8b49ccc968744e7cb1b7a7ba729c Mon Sep 17 00:00:00 2001 From: William Hubbs Date: Thu, 14 May 2015 11:40:29 -0500 Subject: 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. --- man/openrc-run.8 | 5 +++-- s6-guide.md | 20 ++++++-------------- sh/s6.sh | 6 +----- 3 files changed, 10 insertions(+), 21 deletions(-) diff --git a/man/openrc-run.8 b/man/openrc-run.8 index 0a9f5bcc..f08ad791 100644 --- a/man/openrc-run.8 +++ b/man/openrc-run.8 @@ -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}. .It Ar s6_svwait_options_start The options to pass to s6-svwait when starting the service via s6. -.It Ar s6_svwait_options_stop -The options to pass to s6-svwait when stopping the service via s6. +.It Ar s6_service_timeout_stop +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 List of arguments passed to start-stop-daemon when starting the daemon. .It Ar command diff --git a/s6-guide.md b/s6-guide.md index 9a09e32e..63c63de4 100644 --- a/s6-guide.md +++ b/s6-guide.md @@ -33,22 +33,14 @@ supervisor=s6 Several other variables affect s6 services. They are documented on the openrc-run man page, but I will list them here for convenience: -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_stop - the options to pass to s6-svwait when stopping. - -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 -script called /etc/init.d/foobar to use s6 to monitor its daemon, the s6 -service should be the directory /var/svc.d/foobar. +s6_service_path - the path to the s6 service directory. The default is +/var/svc.d/$RC_SVCNAME. -See the documentation for s6 for more information about s6 service -directories. +s6_svwait_options_start - the options to pass to s6-svwait when starting +the service. If this is not set, s6-svwait will not be called. -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. +s6_service_timeout_stop - the amount of time, in milliseconds, s6-svc +should wait for a service to go down when stopping. This is very early support, so feel free to file bugs if you have issues. diff --git a/sh/s6.sh b/sh/s6.sh index a99fd5b8..99aba3fd 100644 --- a/sh/s6.sh +++ b/sh/s6.sh @@ -31,11 +31,7 @@ s6_stop() fi s6_service_link="${RC_SVCDIR}/s6-scan/${s6_service_path##*/}" ebegin "Stopping ${name:-$RC_SVCNAME}" - s6-svc -d "${s6_service_link}" - if [ -n "$s6_svwait_options_stop" ]; then - s6-svwait ${s6_svwait_options_stop} "${s6_service_link}" - fi - sleep 1.5 + s6-svc -Dd -T ${s6_service_timeout_stop:-10000} "${s6_service_link}" set -- $(s6-svstat "${s6_service_link}") [ "$1" = "down" ] eend $? "Failed to stop $RC_SVCNAME" -- cgit v1.2.3