Re: pid file problem

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: "Peter Kovacs" <maxottovonstirlitz(at)gmail(dot)com>
Cc: pgsql-admin(at)postgresql(dot)org
Subject: Re: pid file problem
Date: 2007-02-12 21:31:24
Message-ID: 13465.1171315884@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-admin

"Peter Kovacs" <maxottovonstirlitz(at)gmail(dot)com> writes:
> Please, could you tell me why the pid file is not deleted on shutdown?

It looks to me like the postmaster isn't being given enough time to
finish shutdown before being forcibly killed. This is not great,
but in theory we should always be able to recover from that. You might
want to look to see if you can't extend the SIGTERM-to-SIGKILL delay
though.

> On system startup PostgreSQL 8.1.4 refuses to start due to the pid
> file is left over from previous "session" on Solaris 10 x86.

That should not happen; it should always be possible to detect whether
the file is stale, *if* your start script is written correctly. Per
the comment in miscinit.c:

* If the PID in the lockfile is our own PID or our parent's PID, then
* the file must be stale (probably left over from a previous system
* boot cycle). We need this test because of the likelihood that a
* reboot will assign exactly the same PID as we had in the previous
* reboot. Also, if there is just one more process launch in this
* reboot than in the previous one, the lockfile might mention our
* parent's PID. We can reject that since we'd never be launched
* directly by a competing postmaster. We can't detect grandparent
* processes unfortunately, but if the init script is written
* carefully then all but the immediate parent shell will be
* root-owned processes and so the kill test will fail with EPERM.
*
* We can treat the EPERM-error case as okay because that error
* implies that the existing process has a different userid than we
* do, which means it cannot be a competing postmaster.

If the start script is written in a way that creates multiple levels of
postgres-owned processes, you should fix it. On Linux something
like this works:

su -l postgres -c "/usr/bin/postmaster ... &" >> "$PGLOG" 2>&1 < /dev/null

Don't use "su 'pg_ctl ...'" to start the postmaster, because it creates
exactly the hazard situation of an extra postgres-owned process.

Also, if you are trying to start multiple postmasters at boot, this
technique is insufficient unless you run each one under a distinct userid
(which is probably a good idea anyway on security grounds).

regards, tom lane

In response to

Browse pgsql-admin by date

  From Date Subject
Next Message Eduardo J. Ortega 2007-02-13 02:56:40 Re: WAL files backup
Previous Message Scott Marlowe 2007-02-12 19:56:30 Re: [SQL] Deadlock on transaction