On Sat, Apr 24, 2021 at 02:46:12PM +0200, Oliver Schad wrote:
> Hi everbody,
> if I call "s6-svc -wr servicedir", I get an error message:
> s6-svwait: usage: s6-svwait [ -U | -u | -d | -D ] [ -a | -o ] [ -t
> timeout ] servicedir...
> If I strace that, I find:
> execve("/usr/bin/s6-svwait", ["/usr/bin/s6-svwait", "-r", "--",
> "/run/s6-rc/scandir/nginx/"], [/* 19 vars */]) = 0
> But my s6-svwait doesn't support the option "-r". Is the option missing
> or the call broken?
In this case it's user error. s6-svc does different things depending on
if you give it an action in addition to a wait option or only a wait
option. `s6-svc -wX service' runs `s6-svwait -X service' whereas 
`s6-svc -wX -Y service' runs `s6-svlisten1 -X service s6-svc -Y service'
instead. Unlike s6-svwait, s6-svlisten1 does have the -r option and will
behave mostly as expected.

The thing to keep in mind here is that the -wX options are for
synchronization only - `s6-svc -wu' does not actually tell the service
to go up. In the case of -wr/-wR, those are edge-triggered waits ("wait
for a service to transition from down to up") as opposed to the rest
which are level-triggered ("wait for the service to reach the up
status") and can be true immediately if the service is already at the
desired state. Ergo, it doesn't particularly make sense to wait on
restart events without also triggering a state change.

That said, the documentation could be more clear about -wr/-wR requiring
an action to differentiate them from the other wait states.

Colin Booth

Reply via email to