# processname: postmaster
# pidfile: /var/run/postmaster.pid
-
# Source function library
. /etc/rc.d/init.d/functions
. /etc/sysconfig/network
# Get service config
-[ -f /etc/sysconfig/postgresql ] && . /etc/sysconfig/postgresql
+if [ -f /etc/sysconfig/postgresql ] ; then
+ . /etc/sysconfig/postgresql
+else
+ ALLOW_TCP_CONNECTIONS=no
+ POSTGRES_DATA_DIR=/var/lib/psql
+ POSTGRES_LOG=/var/log/pgsql
+fi
# Check that networking is up.
-[ "${NETWORKING}" = "no" ] && echo "Error: Networking is down"; exit 0
+if is_no "${NETWORKING}"; then
+ msg_Network_Down Postgresql
+ exit 1
+fi
-# Sanity check
-[ -f /tmp/.s.PGSQL.5432 ] || rm -f /tmp/.s.PGSQL.5432
+# check if postmaster is realy alive
+if [ -f /var/lib/pgsql/postmaster.pid ]; then
+ if ps -p `head -1 /var/lib/pgsql/postmaster.pid` > /dev/null ; then
+ #ok. it's alive
+ echo > /dev/null;
+ else
+ # oh, it has crashed
+ rm -f /var/lock/subsys/postgresql
+ fi
+else
+ # it's stoped.
+ rm -f /var/lock/subsys/postgresql
+fi
# See how we were called.
case "$1" in
start)
# Check if the service is already running?
- if [ ! -f /var/lock/subsys/postgresql ]; then
- show Starting postgresql
+ if [ -f /var/lock/subsys/postgresql ]; then
+ msg_Already_Running PostgreSQL
+ else
+ # Sanity check
+ [ -f /tmp/.s.PGSQL.5432 ] || rm -f /tmp/.s.PGSQL.5432
+
+ # Check for the PGDATA structure
+ if [ -f $POSTGRES_DATA_DIR/PG_VERSION ] && [ -f $POSTGRES_DATA_DIR/global/pg_control ]; then
+ # Check version of existing PGDATA
+ if [ `cat $POSTGRES_DATA_DIR/PG_VERSION` != '7.1' ]; then
+ show "Databases created under incompatibile version. Migrate them first."; fail
+ exit 1
+ fi
+ else
+ # Create sample database
+ if [ ! -d $POSTGRES_DATA_DIR ]; then
+ mkdir -p $POSTGRES_DATA_DIR
+ chown postgres.postgres $POSTGRES_DATA_DIR
+ chmod 700 $POSTGRES_DATA_DIR
+ fi
+ TMPDIR=/tmp su postgres -c "LD_LIBRARY_PATH=/usr/lib \
+ initdb --pgdata=$POSTGRES_DATA_DIR \
+ -L /usr/share/postgresql"
+ fi
+
+ msg_starting PostgreSQL
busy
- su postgres -c '/usr/bin/postmaster
- touch /var/lock/subsys/postgresql
- deltext
- ok
- else
- echo "Postgresql already is running"
+ PGSQL_CMDLINE="$([ -n "$POSTGRES_DATA_DIR" ] && echo "-D $POSTGRES_DATA_DIR") \
+ $([ "$POSTGRES_QUIET". = yes. ] && echo '-s')";
+ POSTMASTER_OPTIONS=" \
+ $([ "$POSTGRES_QUIET". = yes. ] && echo '-S') \
+ $([ "$POSTGRES_DISABLE_FSYNC". = yes. ] && echo '-F') \
+ $([ "$ALLOW_TCP_CONNECTIONS". = yes. ] && echo '-i')";
+
+ TMPDIR=/tmp su postgres -c "\
+ $(echo "/usr/bin/pg_ctl start $PGSQL_CMDLINE -l $POSTGRES_LOG") \
+ $([ "$POSTMASTER_OPTIONS". != . ] && echo "-o '$POSTMASTER_OPTIONS'") \
+ $(echo "2>&1 >/dev/null")";
+
+ out=`status postmaster`
+ if [ $? -eq 0 ]; then
+ deltext; ok
+ else
+ deltext; fail
+ exit 1
+ fi
fi
touch /var/lock/subsys/postgresql
;;
stop)
- show Stopping postgresql service
- killproc postmaster
- sleep 2
+
+ if [ ! -f /var/lock/subsys/postgresql ]; then
+ msg_Not_Running PostgreSQL
+ exit 0
+ fi
+ msg_stopping postgreSQL
+ busy
+ PGSQL_CMDLINE="$([ -n "$POSTGRES_DATA_DIR" ] && echo "-D $POSTGRES_DATA_DIR")";
+ TMPDIR=/tmp su postgres -c "/usr/bin/pg_ctl stop $PGSQL_CMDLINE -m fast 2>&1 >/dev/null"
+ out=`status postmaster`
+ if [ $? -eq 0 ]; then
+ deltext; fail
+ echo -e "\n$out";
+ exit 1
+ else
+ deltext; ok
+ fi
rm -f /var/run/postmaster.pid
rm -f /var/lock/subsys/postgresql
;;
status)
- status postmaster
+ PGSQL_CMDLINE="$([ -n "$POSTGRES_DATA_DIR" ] && echo "-D $POSTGRES_DATA_DIR")";
+ TMPDIR=/tmp su postgres -c "/usr/bin/pg_ctl status $PGSQL_CMDLINE"
;;
- restart|reload)
- $0 stop
+ restart)
+ $0 stop
$0 start
;;
+ reload)
+ if [ ! -f /var/lock/subsys/postgresql ]; then
+ msg_Not_Running PostgreSQL
+ exit 0
+ fi
+ msg_reloading postgreSQL
+ busy
+
+ PGSQL_CMDLINE="$([ -n "$POSTGRES_DATA_DIR" ] && echo "-D $POSTGRES_DATA_DIR") \
+ $([ "$POSTGRES_QUIET". = yes. ] && echo '-s')";
+ POSTMASTER_OPTIONS=" \
+ $([ "$POSTGRES_QUIET". = yes. ] && echo '-S') \
+ $([ "$POSTGRES_DISABLE_FSYNC". = yes. ] && echo '-F') \
+ $([ "$ALLOW_TCP_CONNECTIONS". = yes. ] && echo '-i')";
+
+ TMPDIR=/tmp su postgres -c "\
+ $(echo "/usr/bin/pg_ctl restart $PGSQL_CMDLINE -l $POSTGRES_LOG") \
+ $([ "$POSTMASTER_OPTIONS". != . ] && echo "-o '$POSTMASTER_OPTIONS'") \
+ $(echo "2>&1 >/dev/null")";
+
+ out=`status postmaster`
+ if [ $? -eq 0 ]; then
+ deltext; ok
+ else
+ deltext; fail
+ echo -e "\n$out";
+ exit 1
+ fi
+ ;;
*)
- echo "Usage: postgresql {start|stop|status|restart|reload}"
+ msg_Usage "$0 {start|stop|status|restart|reload}"
exit 1
esac