|
| 1 | +#! /bin/sh |
| 2 | +#------------------------------------------------------------------------- |
| 3 | +# |
| 4 | +# pg_ctl.sh-- |
| 5 | +# Start/Stop/Restart/Report status of postmaster |
| 6 | +# |
| 7 | +# Copyright (c) 1999, PostgreSQL Global Development Group |
| 8 | +# |
| 9 | +# |
| 10 | +# IDENTIFICATION |
| 11 | +# $Header: /cvsroot/pgsql/src/bin/pg_ctl/Attic/pg_ctl.sh,v 1.1 1999/12/06 07:23:41 ishii Exp $ |
| 12 | +# |
| 13 | +#------------------------------------------------------------------------- |
| 14 | +CMDNAME=`basename $0` |
| 15 | + |
| 16 | +# set default path to postmaster |
| 17 | +po_path=__BINDIR__/postmaster |
| 18 | + |
| 19 | +# set default shutdown signal |
| 20 | +sig="-TERM" |
| 21 | + |
| 22 | +while [ "$#" -gt 0 ] |
| 23 | +do |
| 24 | + case $1 in |
| 25 | + -h|--help) |
| 26 | + usage=1 |
| 27 | + break |
| 28 | + ;; |
| 29 | + -D) |
| 30 | + shift |
| 31 | + PGDATA="$1" |
| 32 | + ;; |
| 33 | + -p) |
| 34 | + shift |
| 35 | + po_path="$1" |
| 36 | + ;; |
| 37 | + -m) |
| 38 | + shift |
| 39 | + case $1 in |
| 40 | + f|fast) |
| 41 | + sig="-INT" |
| 42 | + ;; |
| 43 | + i|immediate) |
| 44 | + sig="-QUIT" |
| 45 | + ;; |
| 46 | + *) |
| 47 | + echo "$CMDNAME: Wrong shutdown mode $sigopt" |
| 48 | + usage=1 |
| 49 | + ;; |
| 50 | + esac |
| 51 | + ;; |
| 52 | + -w) |
| 53 | + wait=1 |
| 54 | + ;; |
| 55 | + -o) |
| 56 | + shift |
| 57 | + POSTOPTS="$1" |
| 58 | + ;; |
| 59 | + start) |
| 60 | + op="start" |
| 61 | + ;; |
| 62 | + stop) |
| 63 | + op="stop" |
| 64 | + ;; |
| 65 | + restart) |
| 66 | + op="restart" |
| 67 | + ;; |
| 68 | + status) |
| 69 | + op="status" |
| 70 | + ;; |
| 71 | + *) |
| 72 | + usage=1 |
| 73 | + break |
| 74 | + ;; |
| 75 | + esac |
| 76 | + shift |
| 77 | +done |
| 78 | + |
| 79 | +if [ "$usage" = 1 -o "$op" = "" ];then |
| 80 | + echo "Usage: $CMDNAME [-w][-D database_dir][-p path_to_postmaster][-o \"postmaster_opts\"] start" |
| 81 | + echo " $CMDNAME [-w][-D database_dir][-m s[mart]|f[ast]|i[mmediate]] stop" |
| 82 | + echo " $CMDNAME [-w][-D database_dir][-m s[mart]|f[ast]|i[mmediate]][-o \"postmaster_opts\"] restart" |
| 83 | + echo " $CMDNAME [-D database_dir] status" |
| 84 | + exit 1 |
| 85 | +fi |
| 86 | + |
| 87 | +if [ -z "$PGDATA" ];then |
| 88 | + echo "$CMDNAME: No database directory or environment variable \$PGDATA is specified" |
| 89 | + exit 1 |
| 90 | +fi |
| 91 | + |
| 92 | +DEFPOSTOPTS=$PGDATA/postmaster.opts.default |
| 93 | +POSTOPTSFILE=$PGDATA/postmaster.opts |
| 94 | +PIDFILE=$PGDATA/postmaster.pid |
| 95 | + |
| 96 | +if [ $op = "status" ];then |
| 97 | + if [ -f $PIDFILE ];then |
| 98 | + echo "$CMDNAME: postmaster is running (pid: `cat $PIDFILE`)" |
| 99 | + echo "options are:" |
| 100 | + echo "`cat $POSTOPTSFILE`" |
| 101 | + exit 0 |
| 102 | + else |
| 103 | + echo "$CMDNAME: postmaster is not running" |
| 104 | + exit 1 |
| 105 | + fi |
| 106 | +fi |
| 107 | + |
| 108 | +if [ $op = "stop" -o $op = "restart" ];then |
| 109 | + if [ -f $PIDFILE ];then |
| 110 | + kill $sig `cat $PIDFILE` |
| 111 | + |
| 112 | + # wait for postmaster shutting down |
| 113 | + if [ "$wait" = 1 -o $op = "restart" ];then |
| 114 | + cnt=0 |
| 115 | + echo -n "Waiting for postmaster shutting down.." |
| 116 | + |
| 117 | + while : |
| 118 | + do |
| 119 | + if [ -f $PIDFILE ];then |
| 120 | + echo -n "." |
| 121 | + cnt=`expr $cnt + 1` |
| 122 | + if [ $cnt -gt 60 ];then |
| 123 | + echo "$CMDNAME: postmaster does not shut down" |
| 124 | + exit 1 |
| 125 | + fi |
| 126 | + else |
| 127 | + break |
| 128 | + fi |
| 129 | + sleep 1 |
| 130 | + done |
| 131 | + echo "done." |
| 132 | + fi |
| 133 | + |
| 134 | + else |
| 135 | + echo "$CMDNAME: Can't find $PIDFILE." |
| 136 | + echo "Is postmaster running?" |
| 137 | + if [ $op = "restart" ];then |
| 138 | + echo "Anyway, I'm going to start up postmaster..." |
| 139 | + else |
| 140 | + exit 1 |
| 141 | + fi |
| 142 | + fi |
| 143 | +fi |
| 144 | + |
| 145 | +if [ $op = "start" -o $op = "restart" ];then |
| 146 | + if [ -f $PIDFILE ];then |
| 147 | + echo "$CMDNAME: It seems another postmaster is running. Try to start postmaster anyway." |
| 148 | + pid=`cat $PIDFILE` |
| 149 | + fi |
| 150 | + |
| 151 | + if [ -z "$POSTOPTS" ];then |
| 152 | + if [ -f $DEFPOSTOPTS ];then |
| 153 | + eval `cat $DEFPOSTOPTS` & |
| 154 | + else |
| 155 | + echo "$CMDNAME: Can't find $DEFPOSTOPTS" |
| 156 | + exit 1 |
| 157 | + fi |
| 158 | + else |
| 159 | + $po_path $POSTOPTS & |
| 160 | + fi |
| 161 | + |
| 162 | + if [ -f $PIDFILE ];then |
| 163 | + if [ "`cat $PIDFILE`" = "$pid" ];then |
| 164 | + echo "$CMDNAME: Cannot start postmaster. Is another postmaster is running?" |
| 165 | + exit 1 |
| 166 | + fi |
| 167 | + fi |
| 168 | + |
| 169 | + # wait for postmaster starting up |
| 170 | + if [ "$wait" = 1 ];then |
| 171 | + cnt=0 |
| 172 | + echo -n "Waiting for postmaster starting up.." |
| 173 | + while : |
| 174 | + do |
| 175 | + if [ ! -f $PIDFILE ];then |
| 176 | + echo -n "." |
| 177 | + cnt=`expr $cnt + 1` |
| 178 | + if [ $cnt -gt 60 ];then |
| 179 | + echo "$CMDNAME: postmaster does not start up" |
| 180 | + exit 1 |
| 181 | + fi |
| 182 | + sleep 1 |
| 183 | + else |
| 184 | + break |
| 185 | + fi |
| 186 | + done |
| 187 | + echo "done." |
| 188 | + fi |
| 189 | +fi |
| 190 | + |
| 191 | +exit 0 |
0 commit comments