#!/bin/sh # pgpool This is the init script for starting up pgpool-II # # chkconfig: - 64 36 # description: Starts and stops the pgpool daemon # processname: pgpool # pidfile: /var/run/pgpool.pid # # v1.0.0 Devrim GUNDUZ # - Initial version of Red Hat / Fedora init script # # v2.2 Devrim GUNDUZ # - New and improved version which has some fixes. # # v2.2.5 Devrim GUNDUZ # - Fix logging. if [ -r /etc/sysconfig/pgpool ]; then . /etc/sysconfig/pgpool fi # Source function library. INITD=/etc/rc.d/init.d . $INITD/functions # Get function listing for cross-distribution logic. TYPESET=`typeset -f|grep "declare"` # Get config. . /etc/sysconfig/network # Check that networking is up. # We need it for pgpool [ "${NETWORKING}" = "no" ] && exit 0 # Find the name of the script NAME=`basename $0` if [ ${NAME:0:1} = "S" -o ${NAME:0:1} = "K" ] then NAME=${NAME:3} fi # For SELinux we need to use 'runuser' not 'su' if [ -x /sbin/runuser ] then SU=runuser else SU=su fi # Set defaults for configuration variables PGPOOLENGINE=/usr/bin PGPOOLDAEMON=$PGPOOLENGINE/pgpool PGPOOLCONF=/etc/pgpool-II/pgpool.conf PGPOOLPIDDIR=/var/run/pgpool PGPOOLLOG=/var/log/pgpool.log test -x $PGPOOLDAEMON || exit 5 # Check whether the config file exists or not if [ ! -r $PGPOOLCONF ] then echo "$PGPOOLCONF not found" RETVAL=1 failure exit fi # Create the log file if it does not exist if [ ! -x $PGPOOLLOG ] then touch $PGPOOLLOG chown postgres: $PGPOOLLOG fi if [ ! -d $PGPOOLPIDDIR ] then mkdir $PGPOOLPIDDIR chown postgres: $PGPOOLPIDDIR fi script_result=0 start(){ pid=`pidof -s "$PGPOOLDAEMON"` if [ $pid ] then echo "pgpool is already running with pid $pid" failure "$PGPOQL_START" echo script_result=1 exit 1 fi PGPOOL_START=$"Starting ${NAME} service: " echo -n "$PGPOOL_START" $SU -l postgres -c "$PGPOOLDAEMON -f $PGPOOLCONF $OPTS & " >> "$PGPOOLLOG" 2>&1 < /dev/null sleep 2 pid=`pidof -s "$PGPOOLDAEMON"` if [ $pid ] then success "$PGPOOL_START" touch /var/lock/subsys/${NAME} echo else failure "$PGPOQL_START" echo script_result=1 fi } stop(){ echo -n $"Stopping ${NAME} service: " if [ $UID -ne 0 ]; then RETVAL=1 failure else killproc /usr/bin/pgpool # $PGPOOLDAEMON stop & >> "$PGPOOLLOG" 2>&1 < /dev/null RETVAL=$? [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/${NAME} fi; echo return $RETVAL } switch() { echo -n $"Sending switchover request to $NAME " $PGPOOLDAEMON -f $PGPOOLCONF switch >> "$PGPOOLLOG" 2>&1 < /dev/null RETVAL=$? echo if [ $RETVAL -eq 0 ] then echo_success else echo_failure fi echo } restart(){ stop start } reload(){ echo -n $"Reloading ${NAME}: " # 2011-07-03 Matt Solnit: # Modified since the one provided by pgpool does not work correctly (assumes PID file is /var/run/pgpool.pid, not /var/run/pgpool/pgpool.pid) pid_file=$PGPOOLPIDDIR/pgpool.pid pid=`cat $pid_file` if [ -n "$pid" ] ; then kill -HUP $pid echo_success else failure $"Reloading ${NAME}" fi RETVAL=$? echo } condrestart(){ [ -e /var/lock/subsys/${NAME} ] && restart } condstop(){ [ -e /var/lock/subsys/${NAME} ] && stop } # See how we were called. case "$1" in start) start ;; stop) stop ;; switch) switch ;; status) status pgpool script_result=$? ;; restart) restart ;; reload|force-reload) reload ;; condrestart) condrestart ;; condstop) condstop ;; *) echo $"Usage: $0 {start|stop|switch|status|restart|condrestart|condstop|reload|force-reload}" exit 1 esac exit $script_result