[systemd-devel] Boot ordering
Reindl Harald
h.reindl at thelounge.net
Fri Mar 20 13:23:09 PDT 2015
Am 20.03.2015 um 21:10 schrieb Kai Krakow:
>>> i guess that's whay mysqld needs
>>> "ExecStartPost=/usr/libexec/mysqld-wait-ready $MAINPID" having a shell
>>> script waitig in a lopp until connections are accepted to prevent
>>> services with "After=mysqld"
>
> I think MySQL is broken in this regard as it signals the caller to be ready
> before actually being ready. I think I've read this is a known problem and
> that there are plans to support socket activation/socket passing in the
> future.
no - you refuse to understand that "Type=simple" (which is forground)
just starts the binary and since there is no forking there is no
knowledge when it is ready or that it can be ready for whatever
it is just a process running and that's it
>>> with foreground you have *no control at all* becasue systemd fires up the
>>> next service immediately, frankly systemd even don't know the startup
>>> time of "Type=simple" services, hence they are missing in "systemd-anlyze
>>> blame"
>>
>> Right, if a service needs to setup communication channels etc. for
>> other services to talk to, then imho simple is not the best choice as
>> you need to resort to hacks like you describe.
>> Ideally, mysql would use sd_notify, Type=forking is probably the next
>> best.
>
> Ooops, yes Michael, you are perfectly right. If the process is forking, it
> will (at least should) return only when it is ready and then it makes
> perfect sense. This would not be possible with non-forking processes and
> those would need to resort to socket passing to actually "be ready" the very
> moment when started.
well, you where the one which said "start processes in foreground is the
sultion and recommended"
> But for MySQL: It think it is simply not ready yet when returning to the
> caller - probably that's because the service spawner "mysqld_safe" is a
> script which also tries to handle the PID file etc etc
nobody talks about "mysqld_safe", nobody needs it because the only
purpose is to restart mysqld if it fails - that systemd also can, will
and does - no mysqld_safe here, our private builds even remove it from
the package
the point is just that a non-forking process without socket activation
has no change to state anything and socket activation has it's other
drawbacks like "if i say sysetmctl stop i mean systemctl stop and not
fire the service up again if a packet arrives on the socket"
PLEASE stop to hang on mysqld, i just explained why staring a service in
foreground don't help in any case, the opposite is true, hence i changed
the clamd-service which is default forground started to forking to order
clamav-milter correctly (just another *example*)
it's not that easy and the world is not and won't be perfect
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: OpenPGP digital signature
URL: <http://lists.freedesktop.org/archives/systemd-devel/attachments/20150320/fed8a6f0/attachment.sig>
More information about the systemd-devel
mailing list