Hi List, I am trying to understand what After= means in a unit file. Does it mean after the specified target is up and operational or only that the target has been started? I have something that needs postgres but postgres needs to be operational not just started. Sometimes it can take a bit for postgres to become operational. Thanks, Steve
On Wed, Jan 09, 2019 at 10:43:38AM -0500, Steve Clark wrote:> I am trying to understand what After= means in a unit file. Does it > mean after the specified target is up and operational or only that > the target has been started? > > I have something that needs postgres but postgres needs to be > operational not just started. Sometimes it can take a bit for > postgres to become operational.I believe that the postgresql service has Type=notify in it's service definition, which means that it will notify systemd when it is operational. This means that if you have a service that has After=postgresql.service, systemd should wait until after the postgresql service notifies systemd that it is operational before your service will be started. If your service is starting and unable to connect to postgresql, then I would say that's a bug in postgresql -- it shouldn't be notifying systemd that it is operational until it actually is. -- Jonathan Billings <billings at negate.org>
> On Wed, Jan 09, 2019 at 10:43:38AM -0500, Steve Clark wrote: >> I am trying to understand what After= means in a unit file. Does it >> mean after the specified target is up and operational or only that >> the target has been started? >> >> I have something that needs postgres but postgres needs to be >> operational not just started. Sometimes it can take a bit for >> postgres to become operational. > > I believe that the postgresql service has Type=notify in it's service > definition, which means that it will notify systemd when it is > operational. This means that if you have a service that has > After=postgresql.service, systemd should wait until after the > postgresql service notifies systemd that it is operational before your > service will be started. > > If your service is starting and unable to connect to postgresql, then > I would say that's a bug in postgresql -- it shouldn't be notifying > systemd that it is operational until it actually is.This is, in fact, one of the points why I'm very unhappy with systemd and the way it is implemented here and most likely in most distributions. Maybe things _could_ be done the right way with systemd, but it doesn't happen because it quickly starts to be very complex and it's a lot of work to do it for a complete distribution. It just doesn't happen - or at least did not happen in all the years since its introduction. In this example, PG gets just started with "pg_ctl start" and that's it. Regards, Simon
On 01/09/2019 11:36 AM, Jonathan Billings wrote:> On Wed, Jan 09, 2019 at 10:43:38AM -0500, Steve Clark wrote: >> I am trying to understand what After= means in a unit file. Does it >> mean after the specified target is up and operational or only that >> the target has been started? >> >> I have something that needs postgres but postgres needs to be >> operational not just started. Sometimes it can take a bit for >> postgres to become operational. > I believe that the postgresql service has Type=notify in it's service > definition, which means that it will notify systemd when it is > operational. This means that if you have a service that has > After=postgresql.service, systemd should wait until after the > postgresql service notifies systemd that it is operational before your > service will be started. > > If your service is starting and unable to connect to postgresql, then > I would say that's a bug in postgresql -- it shouldn't be notifying > systemd that it is operational until it actually is. >Hmm... I don't see that in the postgresql.service file - this is CentOS Linux release 7.5.1804 (Core) postgresql-server-9.2.24-1.el7_5.x86_64 from /usr/lib/systemd/system/postgresql.service ... [Service] Type=forking User=postgres Group=postgres ... Regards, Steve