Thread: Checking that Pg is running from a shell script

Checking that Pg is running from a shell script

From
Fran Fabrizio
Date:
What's the best way to ensure that Pg is running from a shell script?
 I'm crafting a few RPMs for my projects, one of which will attempt to
load data into a database, but I want to check that it's running first
before I try this.

I'm a shell scripting newbie so apologies if the answer is really
straightforward.  I don't know if UNIX processes leave a standard trail
so that I could just look up if something is listening on 5432, for
example.

Thanks,
Fran


Re: Checking that Pg is running from a shell script

From
Bruce Momjian
Date:
Fran Fabrizio wrote:
>
> What's the best way to ensure that Pg is running from a shell script?
>  I'm crafting a few RPMs for my projects, one of which will attempt to
> load data into a database, but I want to check that it's running first
> before I try this.
>
> I'm a shell scripting newbie so apologies if the answer is really
> straightforward.  I don't know if UNIX processes leave a standard trail
> so that I could just look up if something is listening on 5432, for
> example.

Sure, pg_ctl status:

    $ pg_ctl status
    pg_ctl: postmaster is running (pid: 7340)
    Command line was:
    /usr/var/local/postgres/./bin/postmaster '-o' ''

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

Re: Checking that Pg is running from a shell script

From
Thomas Beutin
Date:
Hi,

if You have fuser on Your system You can check the process
listening on the postgres port 5432:
fuser -n tcp 5432 | wc -l
returns 1 (a line containing only "1" and whitespace) if there
is a process listening on this port and 0 if is not.
Another choice is to look for a process with the pid from
../data/postmaster.pid (probably the better choice).

-tb


On Mon, Jun 10, 2002 at 10:29:06AM -0400, Fran Fabrizio wrote:
>
> What's the best way to ensure that Pg is running from a shell script?
>  I'm crafting a few RPMs for my projects, one of which will attempt to
> load data into a database, but I want to check that it's running first
> before I try this.
>
> I'm a shell scripting newbie so apologies if the answer is really
> straightforward.  I don't know if UNIX processes leave a standard trail
> so that I could just look up if something is listening on 5432, for
> example.
>
> Thanks,
> Fran
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
> http://archives.postgresql.org

--
Thomas Beutin                             tb@laokoon.IN-Berlin.DE
Beam me up, Scotty. There is no intelligent live down in Redmond.

Re: Checking that Pg is running from a shell script

From
Lamar Owen
Date:
On Monday 10 June 2002 10:29 am, Fran Fabrizio wrote:
> What's the best way to ensure that Pg is running from a shell script?
>  I'm crafting a few RPMs for my projects, one of which will attempt to
> load data into a database, but I want to check that it's running first
> before I try this.

See the man page for pg_ctl.  There is, IIRC, a status option, but you have to
know the location of PGDATA (which, in a vanilla RPM install is
/var/lib/pgsql/data).
--
Lamar Owen
WGCR Internet Radio
1 Peter 4:11

Re: Checking that Pg is running from a shell script

From
Fran Fabrizio
Date:
Lamar Owen wrote:

>On Monday 10 June 2002 10:29 am, Fran Fabrizio wrote:
>
>
>>What's the best way to ensure that Pg is running from a shell script?
>> I'm crafting a few RPMs for my projects, one of which will attempt to
>>load data into a database, but I want to check that it's running first
>>before I try this
>>
>See the man page for pg_ctl.  There is, IIRC, a status option, but you have to
>know the location of PGDATA (which, in a vanilla RPM install is
>/var/lib/pgsql/data).
>
>

Thanks all, the pg_ctl -D /var/lib/pgsql/data status should be
sufficient for my needs.

-Fran


Re: Checking that Pg is running from a shell script

From
Ron Snyder
Date:
Given the requirement for having to know PGDATA in order to get pg_ctl to
work, and to offer flexibility for cases where the server will live on a
different machine, I prefer checking status of $?

bash-2.05$ psql quickview -c '\q';
bash-2.05$ echo $?
0
bash-2.05$ export PGPORT=9999
bash-2.05$ psql quickview -c '\q';
psql: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/tmp/.s.PGSQL.9999"?
bash-2.05$ echo $?
2

-ron

> -----Original Message-----
> From: Lamar Owen [mailto:lamar.owen@wgcr.org]
> Sent: Monday, June 10, 2002 10:57 AM
> To: Fran Fabrizio; pgsql-general@postgresql.org
> Subject: Re: [GENERAL] Checking that Pg is running from a shell script
>
>
> On Monday 10 June 2002 10:29 am, Fran Fabrizio wrote:
> > What's the best way to ensure that Pg is running from a
> shell script?
> >  I'm crafting a few RPMs for my projects, one of which will
> attempt to
> > load data into a database, but I want to check that it's
> running first
> > before I try this.
>
> See the man page for pg_ctl.  There is, IIRC, a status
> option, but you have to
> know the location of PGDATA (which, in a vanilla RPM install is
> /var/lib/pgsql/data).
> --
> Lamar Owen
> WGCR Internet Radio
> 1 Peter 4:11
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please send an appropriate
> subscribe-nomail command to majordomo@postgresql.org so that your
> message can get through to the mailing list cleanly
>

Re: Checking that Pg is running from a shell script

From
Vincent Stoessel
Date:
Can pg_ctl across the network? I'd like my middleware server to know
if my postgres db is up and running OK. I guess I could just make a
db connection but I was hoping for a more elegant solution.
Thanks.

Fran Fabrizio wrote:
> Lamar Owen wrote:
>
>> On Monday 10 June 2002 10:29 am, Fran Fabrizio wrote:
>>
>>
>>> What's the best way to ensure that Pg is running from a shell script?
>>> I'm crafting a few RPMs for my projects, one of which will attempt to
>>> load data into a database, but I want to check that it's running first
>>> before I try this
>>>
>> See the man page for pg_ctl.  There is, IIRC, a status option, but you
>> have to know the location of PGDATA (which, in a vanilla RPM install
>> is /var/lib/pgsql/data).
>>
>>
>
> Thanks all, the pg_ctl -D /var/lib/pgsql/data status should be
> sufficient for my needs.
>
> -Fran
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
> http://archives.postgresql.org



--
Vincent Stoessel
Linux Systems Developer
vincent xaymaca.com


Re: Checking that Pg is running from a shell script

From
Tom Lane
Date:
Vincent Stoessel <vincent@xaymaca.com> writes:
> Can pg_ctl across the network?

No.

> I'd like my middleware server to know
> if my postgres db is up and running OK. I guess I could just make a
> db connection but I was hoping for a more elegant solution.

Making a connection is the only way at present.  There was some talk of
writing a "pg_ping" utility that would just send a probe packet to the
postmaster (and not, for example, require you to supply a password).
No one's got round to it, but it's just a small matter of programming...

            regards, tom lane

Re: Checking that Pg is running from a shell script

From
Ericson Smith
Date:
Hi,

We use this small attached perl script to directly check the port on 2
running DB servers and write the status to a file. Our webserver farm
then checks this file every time we need to use the DB.

In our case, we just serve up static content if there is no database,
otherwise we continue our work.

This script will also timeout after 10 seconds, so it wont wait forever
checking a dead PG port.

- Ericson Smith
info@w3matter.com
http://www.swapyourcrap.com

On Mon, 2002-06-10 at 15:33, Vincent Stoessel wrote:
> Can pg_ctl across the network? I'd like my middleware server to know
> if my postgres db is up and running OK. I guess I could just make a
> db connection but I was hoping for a more elegant solution.
> Thanks.
>
> Fran Fabrizio wrote:
> > Lamar Owen wrote:
> >
> >> On Monday 10 June 2002 10:29 am, Fran Fabrizio wrote:
> >>
> >>
> >>> What's the best way to ensure that Pg is running from a shell script?
> >>> I'm crafting a few RPMs for my projects, one of which will attempt to
> >>> load data into a database, but I want to check that it's running first
> >>> before I try this
> >>>
> >> See the man page for pg_ctl.  There is, IIRC, a status option, but you
> >> have to know the location of PGDATA (which, in a vanilla RPM install
> >> is /var/lib/pgsql/data).
> >>
> >>
> >
> > Thanks all, the pg_ctl -D /var/lib/pgsql/data status should be
> > sufficient for my needs.
> >
> > -Fran
> >
> >
> > ---------------------------(end of broadcast)---------------------------
> > TIP 6: Have you searched our list archives?
> >
> > http://archives.postgresql.org
>
>
>
> --
> Vincent Stoessel
> Linux Systems Developer
> vincent xaymaca.com
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org


Attachment

Re: Checking that Pg is running from a shell script

From
"McCaffity, Ray (Contractor)"
Date:
This seems to work on UNIX systems.  (Tested on Linux and Solaris)
You have to change the path of PIDFILE variable below.

#!/usr/bin/ksh
# $Source$
#*DESCRIPTION:**************************************************************
****
# is_postgres_running:
# This script returns either YES or NO, depending on whether Postgresql is
running.
#

## Hard-code the response for testing:
#echo "YES"         #*DEBUG*
#exit               #*DEBUG*

# the path to your PID file
PIDFILE=/pgdata/postmaster.pid

    if [ -f $PIDFILE ] ; then
    PID=`cat $PIDFILE`
    if [ "x$PID" != "x" ] && kill -0 $PID 2>/dev/null ; then
        STATUS="YES"
    else
        STATUS="NO"
    fi
    else
    STATUS="NO"
    fi

echo $STATUS

-----Original Message-----
From: Tom Lane [mailto:tgl@sss.pgh.pa.us]
Sent: Monday, June 10, 2002 1:51 PM
To: Vincent Stoessel
Cc: Fran Fabrizio; pgsql-general@postgresql.org
Subject: Re: [GENERAL] Checking that Pg is running from a shell script


Vincent Stoessel <vincent@xaymaca.com> writes:
> Can pg_ctl across the network?

No.

> I'd like my middleware server to know
> if my postgres db is up and running OK. I guess I could just make a
> db connection but I was hoping for a more elegant solution.

Making a connection is the only way at present.  There was some talk of
writing a "pg_ping" utility that would just send a probe packet to the
postmaster (and not, for example, require you to supply a password).
No one's got round to it, but it's just a small matter of programming...

            regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster

Re: Checking that Pg is running from a shell script

From
Vincent Stoessel
Date:
This is very cool, thanks!

Ericson Smith wrote:
> Hi,
>
> We use this small attached perl script to directly check the port on 2
> running DB servers and write the status to a file. Our webserver farm
> then checks this file every time we need to use the DB.
>
> In our case, we just serve up static content if there is no database,
> otherwise we continue our work.
>
> This script will also timeout after 10 seconds, so it wont wait forever
> checking a dead PG port.
>
> - Ericson Smith
> info@w3matter.com
> http://www.swapyourcrap.com
>
> On Mon, 2002-06-10 at 15:33, Vincent Stoessel wrote:
>
>>Can pg_ctl across the network? I'd like my middleware server to know
>>if my postgres db is up and running OK. I guess I could just make a
>>db connection but I was hoping for a more elegant solution.
>>Thanks.
>>
>>Fran Fabrizio wrote:
>>
>>>Lamar Owen wrote:
>>>
>>>
>>>>On Monday 10 June 2002 10:29 am, Fran Fabrizio wrote:
>>>>
>>>>
>>>>
>>>>>What's the best way to ensure that Pg is running from a shell script?
>>>>>I'm crafting a few RPMs for my projects, one of which will attempt to
>>>>>load data into a database, but I want to check that it's running first
>>>>>before I try this
>>>>>
>>>>
>>>>See the man page for pg_ctl.  There is, IIRC, a status option, but you
>>>>have to know the location of PGDATA (which, in a vanilla RPM install
>>>>is /var/lib/pgsql/data).
>>>>
>>>>
>>>
>>>Thanks all, the pg_ctl -D /var/lib/pgsql/data status should be
>>>sufficient for my needs.
>>>
>>>-Fran
>>>
>>>
>>>---------------------------(end of broadcast)---------------------------
>>>TIP 6: Have you searched our list archives?
>>>
>>>http://archives.postgresql.org
>>
>>
>>
>>--
>>Vincent Stoessel
>>Linux Systems Developer
>>vincent xaymaca.com
>>
>>
>>---------------------------(end of broadcast)---------------------------
>>TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
>
>
>
> ------------------------------------------------------------------------
>
> #!/usr/bin/perl
> use IO::Socket;
>
> $SIG{ALRM} = \&fail;
> alarm 10;
>
> $remote  = IO::Socket::INET->new(Proto=>"tcp", PeerAddr=>"192.168.1.1", PeerPort=>"5432");
> $remote2 = IO::Socket::INET->new(Proto=>"tcp", PeerAddr=>"192.168.1.2", PeerPort=>"5432");
> unless($remote) { &fail; }
> close($remote);
>
> unless($remote2) { &fail; }
> close($remote2);
>
> open(FP,">/httpd/htdocs/status2.db");
> print FP "OK";
> close(FP);
>
> open(FP,">/httpd/htdocs/status.db");
> print FP "OK";
> close(FP);
>
> sub fail
> {
>   if(!$remote)
>   {
>         open(FP,">/httpd/htdocs/status.db");
>         print FP "FAIL";
>         close(FP);
>         $msg = "OLD Database Failed!";
>         `echo "$msg" | mail development@did-it.com`;
>   }
>
>   if(!$remote2)
>   {
>         open(FP,">/httpd/htdocs/status2.db");
>         print FP "FAIL";
>         close(FP);
>         $msg = "NEW Database Failes!";
>         `echo "$msg" | mail development@did-it.com`;
>   }
>
>   exit(0);
> }
>
>
>
> ------------------------------------------------------------------------
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org



--
Vincent Stoessel
Linux Systems Developer
vincent xaymaca.com