3 # postgresql This is the init script for starting up the PostgreSQL
8 # description: Starts and stops the PostgreSQL backend daemon that handles \
9 # all database requests.
11 # processname: postmaster
15 # Source function library
16 . /etc/rc.d/init.d/functions
19 . /etc/sysconfig/network
22 if [ -f /etc/sysconfig/postgresql ]; then
23 . /etc/sysconfig/postgresql
25 nls "Error: %s not found" /etc/sysconfig/postgresql
26 nls " PostgreSQL can't be run."
30 if [ ! "$PG_DB_CLUSTERS" ]; then
31 nls "Error: PG_DB_CLUSTERS not found or is empty"
32 nls " PostgreSQL can't be run."
36 # Check that networking is up.
37 if is_yes "${NETWORKING}"; then
38 if [ ! -f /var/lock/subsys/network -a "$1" != stop -a "$1" != status -a "$1" != init ]; then
39 msg_network_down PostgreSQL
48 # any db cluster as command line argument?
51 # perform action for specified clusters only
54 DB_CLUSTERS="$PG_DB_CLUSTERS"
62 # check for postgresql status
68 # PG_STATUS = running | not running
69 # PG_PID = pid of postmaster process
74 output=`TMPDIR=/tmp su - postgres -c "/usr/bin/pg_ctl -D $1 status"`
77 if [ $status -eq 1 ]; then
78 PG_STATUS="not running"
79 elif [ $status -eq 0 ]; then
81 # or maybe grab it from postmaster.pid file?
82 PG_PID=`echo "$output" | sed 's/^pg_ctl:.*PID: \([0-9]\+\).*/\1/' | head -1`
87 # start postgresql and display appropriate messages
93 msg_starting "PostgreSQL $1"
95 TMPDIR=/tmp su - postgres -c "/usr/bin/pg_ctl -w -D $1 start 2>&1 >/dev/null"
99 if [ "$PG_STATUS" != "unknown" -a "$PG_PID" != "unknown" ]; then
107 # check for running postgresql instances; if any instance is running then
108 # create subsys lock file
111 # check for every defined db cluster in sysconfig file
112 for pgdir in $PG_DB_CLUSTERS; do
114 if [ "$PG_STATUS" = "running" ]; then
115 touch /var/lock/subsys/postgresql
119 rm -f /var/lock/subsys/postgresql
123 # End of useful functions.
127 # See how we were called.
128 # Every action is performed for all given (all configured by default)
132 for pgdir in $DB_CLUSTERS; do
134 if [ "$PG_STATUS" = "running" ]; then
135 # pg_ctl status can misinform us about postgresql status
136 # so let's check if postmaster is really alive
137 if ps ax | grep -v grep | grep -q "$PG_PID"; then
138 msg_already_running "PostgreSQL $pgdir"
140 # pg_ctl has misinformed us about postgresql status;
141 # remove pid file and run postgresql
142 msg_not_running "PostgreSQL $pgdir"
143 rm -f $pgdir/postmaster.pid
153 for pgdir in $DB_CLUSTERS; do
155 if [ "$PG_STATUS" = "not running" ]; then
156 msg_not_running "PostgreSQL $pgdir"
158 msg_stopping "PostgreSQL $pgdir"
160 # is postgresql really alive?
161 if ps ax | grep -v grep | grep -q "$PG_PID"; then
162 TMPDIR=/tmp su - postgres -c "/usr/bin/pg_ctl -w -D $pgdir stop -m fast 2>&1 >/dev/null"
164 if [ "$PG_STATUS" != "not running" ]; then
170 # postgresql is not really alive; pg_ctl misinformed us
174 rm -f $pgdir/postmaster.pid
180 for pgdir in $DB_CLUSTERS; do
181 TMPDIR=/tmp su - postgres -c "/usr/bin/pg_ctl -D $pgdir status"
185 $0 stop "$DB_CLUSTERS"
186 $0 start "$DB_CLUSTERS"
189 for pgdir in $DB_CLUSTERS; do
191 if [ "$PG_STATUS" = "not running" ]; then
192 msg_not_running "PostgreSQL $pgdir"
194 msg_reloading "PostgreSQL $pgdir"
196 # is postgresql really alive?
197 if ps ax | grep -v grep | grep -q "$PG_PID"; then
198 TMPDIR=/tmp su - postgres -c "/usr/bin/pg_ctl -D $pgdir restart 2>&1 >/dev/null"
200 if [ "$PG_STATUS" = "running" ]; then
206 # postgresql died and pg_ctl has misinformed us about
207 # the status; remove pid file and start it again
209 rm -f $pgdir/postmaster.pid
217 nls "Note: this is only simple init action for convenience."
218 nls "If you want some non-standard options, consider using initdb(1)."
220 for pgdir in $DB_CLUSTERS; do
221 if [ -f $pgdir/PG_VERSION ]; then
222 echo $(nls "Skipping existing cluster %s" "$pgdir")
224 echo $(nls "Initializing cluster %s" "$pgdir")
227 chown postgres:postgres $pgdir
228 TMPDIR=/tmp su - postgres -s /bin/sh -c "initdb -E UNICODE -D $pgdir"
231 echo $(nls "REMEMBER to setup password for user \"postgres\"")'!'
234 msg_usage "$0 {start|stop|init|restart|reload|force-reload|status}"