I'm struggling to figure out how to start a particular initialization when a 
service first comes up (since service startup, system startup, or ever).
I'm pretty sure it's well documented, but if the question is phrased 
incorrectly, you can search for a long time.

 Do you mean that the "start" script would only be run once, no matter
how many times the service can die and be restarted later on?
 If so, it's the job of a service manager. Conceptually, "start" is
not really part of the supervised service, it's something separate that
needs to run before your service is first brought up.

 In the s6 world, this would be handled by s6-rc (or anopa). You would
make a oneshot that contains your "start" script, and your longrun
(containing your "run" script, the thing you want supervised) would
depend on the "start" oneshot.

 But if it's not what you mean (and it appears it's not), read below.


What daemontools-encore does with ./start seems pretty ok - and would be near 
perfect if it were to wait for ./start to finish before running ./run.

 After reading
 https://untroubled.org/daemontools-encore/supervise.8.html
I understand that ./start is run every time the service is started, not
only the first time, and ./run is only actually executed if ./start
exits 0. Which is a very different approach: "start" is not a
oneshot, but part of the service.
 And if it's part of the service and supposed to be run every time,
then you don't need a separate ./start: it can just as well be part
of the ./run script.

 To emulate this in execline: if -X { ./start } rest-of-run-script
and in shell: set -e ; ./start ; rest-of-run-script


s6 has a concept for ./finish - so I think a ./start concept is there as well 
and I just can't find it. Can someone please nudge me on this?

 ./finish has to be separate because it's spawned when ./run dies.
But anything that needs to run *before* ./run can just be integrated
into ./run instead, there's no need for a separate script.

--
 Laurent

Reply via email to