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


Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to