supervision - discussion about system services, daemon supervision, init, runlevel management, and tools such as s6 and runit
 help / color / mirror / Atom feed
From: Uffe Jakobsen <uffe@uffe.org>
Subject: Re: Should svwaitup/down be built again, or how to make sv do this?
Date: Tue, 18 Jul 2006 10:38:04 +0200	[thread overview]
Message-ID: <44BC9DEC.90500@uffe.org> (raw)
In-Reply-To: <200607171256.14899.spamite@ev1.net>


Kevin wrote:
> On Thursday 13 July 2006 03:44, Gerrit Pape wrote:
>>> We cannot make sv block like svwaitup did.  Either we're
>>> misunderstanding how to use it, or something.
>>>
>>> An example service script is included below:
>>>
>>> #!/bin/sh
>>> svwaitup ~/service/sfsagent
>>> exec chpst -e env runthis.sh
>> svwaitup did wait two seconds by default after the sfsagent service
>> daemon has been started, this seems to be what you relied on.  Indeed,
>> sv doesn't do that by default, but it supports the ./check script
>> instead.
> 
> svwaitup waited until the service had been running for at least 2 seconds 
> before exiting, no?
> 
> 
>> If you want 'sv start ~/service/sfsagent' or 'sv check
>> ~/service/sfsagent' to wait for two seconds before returning, simply do
>> 'sleep 2' in ~/service/sfsagent/check.
> 
> That would be a useless check.  What we want is for the sfsagent service 
> to be running, not just wait 2 seconds before starting.
> 
>> Better yet, find out how to check for what the sfsagent service daemon
>> needs to provide before runthis.sh can be started, and check for that
>> in ~/service/sfsagent/check.
> 
> So, it sounds like you're saying that the functionality of checking for a 
> service to be running, and waiting until that service is running before 
> continuing no longer exists in runit as it is presently built.  Is this 
> correct?

I may be wrong here but there seems to be some sort of confusion about the internal state of a service versus the external runit state running/not running.

The runit supervisor framework can only see if a service (process) is running - it has no idea if that service is yet functional or not.

Runit assumes that if the process is running then it is ok. It knows nothing about how long it will take for the process to become operational (as a service) from the point where it is initialized. 
You could have a services that performs 'deep and long' integrity checks during initialization before they start eg. listening and providing their services - and how long will 'deep and long' integrity checks during initialzation take ? seconds, minutes, hours or even days ? runit has no chance of knowing that - as long as the supervised process is running everything is ok from runit's perspactive.

My guess is that you've until now just been lucky that your service typically takes just a little less than 2 seconds to initialize and become operational.

That is why Gerrit suggests that you should implement a test in your check script that can determine if your service actually has become operational (functional) yet or not. Typical checks could be to test if the service is listening on a socket/port.

Let's hope I'm not all wrong :-)

Kind regards Uffe



  parent reply	other threads:[~2006-07-18  8:38 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-07-12  1:59 Kevin
2006-07-12 15:20 ` Gerrit Pape
2006-07-12 16:27   ` Kevin
2006-07-13  8:44     ` Gerrit Pape
2006-07-17 17:56       ` Kevin
2006-07-17 19:32         ` Stefan Karrmann
2006-07-18  8:38         ` Uffe Jakobsen [this message]
2006-07-19 18:46           ` Kevin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=44BC9DEC.90500@uffe.org \
    --to=uffe@uffe.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).