pg_ctl: a script to start/stop/restart and report status of postmaster.

This commit is contained in:
Tatsuo Ishii 1999-12-06 07:23:41 +00:00
parent 169051afc9
commit 5b912b089c
2 changed files with 219 additions and 0 deletions

28
src/bin/pg_ctl/Makefile Normal file
View File

@ -0,0 +1,28 @@
#-------------------------------------------------------------------------
#
# Makefile.inc--
# Makefile for bin/pg_ctl
#
# Copyright (c) 1999, PostgreSQL Global Development Group
#
#
# IDENTIFICATION
# $Header: /cvsroot/pgsql/src/bin/pg_ctl/Makefile,v 1.1 1999/12/06 07:23:41 ishii Exp $
#
#-------------------------------------------------------------------------
SRCDIR= ../..
include ../../Makefile.global
all: pg_ctl
pg_ctl: pg_ctl.sh
sed -e 's@__BINDIR__@$(BINDIR)@' pg_ctl.sh > pg_ctl
install: pg_ctl
$(INSTALL) $(INSTL_EXE_OPTS) $< $(BINDIR)/$<
clean:
rm -f pg_ctl
dep depend:

191
src/bin/pg_ctl/pg_ctl.sh Executable file
View File

@ -0,0 +1,191 @@
#! /bin/sh
#-------------------------------------------------------------------------
#
# pg_ctl.sh--
# Start/Stop/Restart/Report status of postmaster
#
# Copyright (c) 1999, PostgreSQL Global Development Group
#
#
# IDENTIFICATION
# $Header: /cvsroot/pgsql/src/bin/pg_ctl/Attic/pg_ctl.sh,v 1.1 1999/12/06 07:23:41 ishii Exp $
#
#-------------------------------------------------------------------------
CMDNAME=`basename $0`
# set default path to postmaster
po_path=__BINDIR__/postmaster
# set default shutdown signal
sig="-TERM"
while [ "$#" -gt 0 ]
do
case $1 in
-h|--help)
usage=1
break
;;
-D)
shift
PGDATA="$1"
;;
-p)
shift
po_path="$1"
;;
-m)
shift
case $1 in
f|fast)
sig="-INT"
;;
i|immediate)
sig="-QUIT"
;;
*)
echo "$CMDNAME: Wrong shutdown mode $sigopt"
usage=1
;;
esac
;;
-w)
wait=1
;;
-o)
shift
POSTOPTS="$1"
;;
start)
op="start"
;;
stop)
op="stop"
;;
restart)
op="restart"
;;
status)
op="status"
;;
*)
usage=1
break
;;
esac
shift
done
if [ "$usage" = 1 -o "$op" = "" ];then
echo "Usage: $CMDNAME [-w][-D database_dir][-p path_to_postmaster][-o \"postmaster_opts\"] start"
echo " $CMDNAME [-w][-D database_dir][-m s[mart]|f[ast]|i[mmediate]] stop"
echo " $CMDNAME [-w][-D database_dir][-m s[mart]|f[ast]|i[mmediate]][-o \"postmaster_opts\"] restart"
echo " $CMDNAME [-D database_dir] status"
exit 1
fi
if [ -z "$PGDATA" ];then
echo "$CMDNAME: No database directory or environment variable \$PGDATA is specified"
exit 1
fi
DEFPOSTOPTS=$PGDATA/postmaster.opts.default
POSTOPTSFILE=$PGDATA/postmaster.opts
PIDFILE=$PGDATA/postmaster.pid
if [ $op = "status" ];then
if [ -f $PIDFILE ];then
echo "$CMDNAME: postmaster is running (pid: `cat $PIDFILE`)"
echo "options are:"
echo "`cat $POSTOPTSFILE`"
exit 0
else
echo "$CMDNAME: postmaster is not running"
exit 1
fi
fi
if [ $op = "stop" -o $op = "restart" ];then
if [ -f $PIDFILE ];then
kill $sig `cat $PIDFILE`
# wait for postmaster shutting down
if [ "$wait" = 1 -o $op = "restart" ];then
cnt=0
echo -n "Waiting for postmaster shutting down.."
while :
do
if [ -f $PIDFILE ];then
echo -n "."
cnt=`expr $cnt + 1`
if [ $cnt -gt 60 ];then
echo "$CMDNAME: postmaster does not shut down"
exit 1
fi
else
break
fi
sleep 1
done
echo "done."
fi
else
echo "$CMDNAME: Can't find $PIDFILE."
echo "Is postmaster running?"
if [ $op = "restart" ];then
echo "Anyway, I'm going to start up postmaster..."
else
exit 1
fi
fi
fi
if [ $op = "start" -o $op = "restart" ];then
if [ -f $PIDFILE ];then
echo "$CMDNAME: It seems another postmaster is running. Try to start postmaster anyway."
pid=`cat $PIDFILE`
fi
if [ -z "$POSTOPTS" ];then
if [ -f $DEFPOSTOPTS ];then
eval `cat $DEFPOSTOPTS` &
else
echo "$CMDNAME: Can't find $DEFPOSTOPTS"
exit 1
fi
else
$po_path $POSTOPTS &
fi
if [ -f $PIDFILE ];then
if [ "`cat $PIDFILE`" = "$pid" ];then
echo "$CMDNAME: Cannot start postmaster. Is another postmaster is running?"
exit 1
fi
fi
# wait for postmaster starting up
if [ "$wait" = 1 ];then
cnt=0
echo -n "Waiting for postmaster starting up.."
while :
do
if [ ! -f $PIDFILE ];then
echo -n "."
cnt=`expr $cnt + 1`
if [ $cnt -gt 60 ];then
echo "$CMDNAME: postmaster does not start up"
exit 1
fi
sleep 1
else
break
fi
done
echo "done."
fi
fi
exit 0