starting jails in the background & dependencies

Miroslav Lachman 000.fbsd at quip.cz
Thu Jan 14 17:14:43 UTC 2010


Alexander Leidinger wrote:
> Quoting Miroslav Lachman <000.fbsd at quip.cz> (from Tue, 05 Jan 2010
> 11:45:34 +0100):
>
>> Alexander Leidinger wrote:
>>> On Mon, 07 Dec 2009 08:03:53 +0100 Alexander Leidinger
>>> <Alexander at Leidinger.net> wrote:
>>>
>>>> Hi,
>>>>
>>>> now that jails are started in the background (which is good, to
>>>
>>> I just realized yesterday that it also stops in parallel (in the
>>> background). This is bad. It may be the case that a jail is not fully
>>> stopped via the rc scripts when the OS decides to kill the remaining
>>> processes during a shutdown.
>>>
>>> My first reaction is to only allow to start in the background, but
>>> everything else needs to be serialized.
>>>
>>> Any objections or better ideas out there?
>>
>> Maybe stopping can be done in parallel, but rc script should wait (in
>> loop) until all jails are stopped or some configurable timeout (for
>> example 60 seconds).
>
> Feel free to come up with a proof of concept... but the timeout on stop
> should be "forever" IMO. If you have a busy software which needs to be
> shutdown correctly for data safety or consistency reasons, I do not want
> that a reboot or shutdown prevents the correct shutdown.

I misunderstand the whole thing from the begining. It's all about 
wording "background" and "parallel".

My first understanding was if I have 4 jails, they are started in 
parallel (each other)
something like:

for J in jail1 jail2 jail3 jail4
do
     jail_start $J &
done

and similar for stoping them.

But now I see that it is just a start jails in serial as usual but 
rc.d/jail runs in the background, so next rc script will start right 
after rc.d/jail, not waiting to jails come up.

Both approaches have its pros and cons.

In the first case (starting and stopping each jail in the background) 
stopping can be easy as:

for J in $jail_list
do
     jail_stop $J &
done

while [ -n "`jls`" ]
do
     sleep 1
done

echo "all jails were stopped"


For the second case, where jails are started / stopped as usual but 
whole rc.d/jail is backgrounded the only solution I got in my mind is 
the second rc script (for example bgjail_stop) with similar loop as 
above executed as one of the last rc scripts on system shutdown.
(but I know it is ugly solution)

I hope somebody will come with better idea :)

Miroslav Lachman


PS: as my english is not so well, it is sometimes hard to me to 
understand and sometimes hard to explain things


More information about the freebsd-jail mailing list