Hello Lennart, Many thank for you advices, but... Quoting Lennart Poettering <mzerqung@xxxxxxxxxxx>:
So the service "After=" directive should be conditional to an env variable. I have seen no provision within systemd to resolve such case... Could somebody propose a nice way to resolve such needs within systemd service file? (if this is achievable?).You can add After= for both databases. After= orders units only if they exist, and if they don't htey have no effect. Hence simply lists all database services you support and you should be fine.
I just understood I need "Requires=" instead of "After=" as the application "require" the data-base daemon to be up and running in order to be operational. Then (to do some testing), I required "spamassassin.service dovecot.service bigre.service" sure enough "bigre.service" is unknown (as expected) and systemctl complain "Failed to issue method call: Unit bigre.service failed to load: No such file or directory" (as it should). Such I can't require a service the sysadmin don't want to use (lets say he want just use Posgresql but not want to start Mysqld at all and didn't bother to install it). So it will be nice to have a way to do "conditional require", if not, we are asking the sysadmin to "mess up" with the service definition file (which is not good)...
Second question:calling systemctl (restart, start) allowed? (basically; is systemctl calling another systemctl technically sound?).All processes started by ExecStartPre= will be killed before ExecStart= is run. You cannot fork long-running processes from that. It's usually a bad idea to run systemctl from ExecStartPre= since that hides dependencies. With Wants= and After= you should have all you need to make these depdendencies explicit
Agreed, dependency are nicely resolved by "Requires=" directive, but while doing the first start config I need (at least) to restart httpd.service once a new WEB interface is automatically defined by application first start config. The only way I see is within the ExecStartPre script to issue systemctl restart httpd once the new application httpd configuration is done. if that is not a good way, how can I handle such situation within the service definition file?.
If you have various bits you need to run in order to get your service up, it's a good idea to simply split up the logic into two unit files, and pull in one from the other and add ordering between them. This makes it unnecessary to invoke systemctl from ExecStartPre= or any other such command.
Sorry I do not understand how this resolve the "restart needed" situation. What am I missing?
Last question:
[..]
yet available within PIDFile when the process started by ExecStart exit. So systemd complain about the fact the daemon never started (which is not true, daemon is up and running).Use Type=forking. That will cause systemd wait for the initial process to exit before checking for the PID file.
Was already with Type=forking, the initial process start, initiate the daemon itself, starting in background (which set-up a lock file with its own process PID) once some checking is done. Timing are such, systemctl check for pid befor lock file is in place. A timer capability of some kind, would be nice?.
Lennart -- Lennart Poettering - Red Hat, Inc. -- devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxxx https://admin.fedoraproject.org/mailman/listinfo/devel
-- A bientôt =========================================================== Jean-Marc Pigeon E-Mail: jmp@xxxxxxx SAFE Inc. Phone: (514) 493-4280 Clement, 'a kiss solution' to get rid of SPAM (at last) Clement' Home base <"http://www.clement.safe.ca"> ===========================================================
<<attachment: smime.p7s>>
-- devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxxx https://admin.fedoraproject.org/mailman/listinfo/devel