whitivery <co55-sy1t at dea.spamcon.org> wrote: >Jonathan Billings <billings at negate.org> >wrote: > >>On Sun, Dec 18, 2016 at 08:50:54PM -0800, whitivery wrote: >>> It is a system with several servers (various platforms/distros). >>> >>> One piece of software runs on all of the servers. For it to operate >>> correctly, the instance on one server (prime) must start before the others >>> (auxiliary). >>> >>> So a boot delay is added (via a script sourced from initscript, which >>> first waits for network to come up) to set the boot delay values for each >>> server - prime at 0, others at some other value of 15 to 110 seconds >>> depending on platform. >>> >>> But when it is necessary to manipulate the service interactively via the >>> "service" command, the boot delay needs to be bypassed. >> >>Well, the first thing I'd do is make the service wait for the network >>to be online. In the [Unit] section add Wants=network-online.target. >> >>Secondly, I'd try to find a way for the auxiliary services to ping the >>prime service to ensure its up, and make that script a ExecStartPre >>entry in the [Service] section. You'll want to adjust the >>TimeoutStartSec in case it might exceed the DefaultTimeoutStartSec in >>/etc/systemd/system.conf, which is 90 seconds. > >Thank you for the idea, but as mentioned, the same service runs on a mix >of server platforms and distros, and the older ones do not use systemd, so >I'd prefer to stick with SysV type initscripts that work on all of them. Follow-up: with no other solution, I solved the problem externally. I made an alias (actually, a shell function) for "service". If the interactive user is trying to start or restart the affected service, a flag (sourced environment variable in a file under /etc/default) is set, the real service binary is called, the initscript sees the flag and skips the boot delay, then the "service" function restores the flag. Less than ideal but it works.