If you are running the sv check within a dependent service's run script that was spawned first, the script will fail and runsv will respawn it, with the call eventually succeeding once the required service is up. This presumes that you start your scripts set -e or /bin/sh -e of course, but there's no reason not to in this case.
If you're calling this from a daemon script that is outside of the general supervision framework, you'll need to write a simple wait loop in shell to wrap the sv call similar to what Case suggested. Something like the following should do you: /bin/sh while ! sv check $REQSVC > /dev/null do echo "Waiting on required service $REQSVC" sleep 1 done start_your_script_or_program_or_whatever But at that point, might as well just stick it into supervision and let the dependent run script fail a few times before check passes. Cheers! On Mon, Feb 16, 2015 at 1:23 PM, Buck Evan <[email protected]> wrote: > Is there anything else I can do to get this considered for merge? > > On Mon, Feb 9, 2015 at 5:55 PM, Buck Evan <[email protected]> wrote: > >> Essentially, if `sv check` is run too soon after `runsv` (or runit for >> that matter), it will immediately fail without waiting for runsv to come >> up. In my particular use case, runit is running inside a (detached) docker, >> and I'm using `sv check` to wait for my dockerized service to be ready, >> which I think is a good use case for `sv check`. Without this patch, I'm >> forced to write some code which re-runs `sv check` if it fails before >> $SVWAIT seconds, which sounds awfully like the behavior of sv-check itself. >> >> >> You can demonstrate the problem I'm trying to describe like so: >> >> #!/bin/bash >> make >> rm -rf myservice >> mkdir -p myservice >> ln -s /bin/cat myservice/run >> ./runsv ./myservice/ >&/dev/null & ./sv check ./myservice/; echo $?; ./sv >> check ./myservice/; echo $? >> >> >> Output: >> >> $ ./demo >> warning: ./myservice/: unable to open supervise/ok: file does not exist >> 1 >> ok: run: ./myservice/: (pid 65635) 0s >> 0 >> >> >> Patch: >> >> --- src/sv.c >> +++ src/sv.c >> @@ -213,7 +213,7 @@ int checkscript() { >> int check(char *a) { >> unsigned int pid; >> >> - if ((r =svstatus_get()) == -1) return(-1); >> + if ((r =svstatus_get()) == -1) return(0); >> while (*a) { >> if (r == 0) { if (*a == 'x') return(1); return(-1); } >> pid =(unsigned char)svstatus[15]; >> >> -- "If the doors of perception were cleansed every thing would appear to man as it is, infinite. For man has closed himself up, till he sees all things thru' narrow chinks of his cavern." -- William Blake
