...and on Wed, Jun 23, 2004 at 01:38:44AM -0300, Janio Rosa da Silva used the keyboard:
> 
> I am looking for a way to start PostgreSQL when the computer is turned
> on. Any ideas?
> 
> I am using Slackware 9.1 and PostgreSQL 7.4.2;
> 
> I was made a rc.postgresql script file. And I called for it from rc.local.
> 
> But, I thing when the slackware is starting, the commands in script file are
> executting under root. But the pg_ctl or postmaster should be executed under
> the postgres user.
> 
> Who can I start the postgresql server when the slackware is turned on?
> 
> thanks,
> 
> Janio

Hello,

We have a couple of setups running PostgreSQL, all based on Slackware,
various versions.

I don't know if you're aware of it, but Slackware init had been a lot more
sysv-like since 8.0 already. The only thing missing are init.d and rc?.d
directories in /etc/rc.d; if you create these and put things inside, the
rc scripts will automatically pick it up and do the right thing [tm]. Well,
almost.

That said, you can use the contrib/start-scripts/linux script to control
PostgreSQL, which will also switch the identity when starting up postmaster,
all you need is to modify it a bit if you installed under a prefix other
than /usr/local/pgsql/.

Two notes though:

    - you will need to patch the /etc/rc.d/rc.sysvinit script, as it
      currently does kill scripts in a wrong manner - instead of
      executing kill scripts for the target runlevel, it executes them
      for the originating runlevel, which is wrong. Then again, it's no
      biggie, as all you need to change is in the attached patch

    - I've done some modifications to contrib/start-scripts/linux that
      will also source a file containing environment variables for extra
      data directories, so there's no need for manual modifications of
      runtime environment to make postmaster realize there are other
      locations for databases - all you need is add an environment
      variable to that file; the attached script is the modified one,
      but do look into ${prefix}, ${PGDATA} and ${PGLOG} - they most
      probably don't contain the values you want

Recap - patch /etc/rc.d/rc.sysvinit with the attached patch, create

    $ mkdir /etc/rc.d/{init,rc{0,1,2,3,4,5,6}}.d

put the attached postgres script into /etc/rc.d/init.d/ and create
symlinks in appropriate runlevel directories. If you'd like to use
extra data directoeis, put the attached data_dirs file into postgres
home directory. After you've done that, everything should go smoothly
on startup.

(Hopefully the patches go through to the list, if not and anybody is
interested, e-mail me and I'll send them to you too.)

Hope this helped,
-- 
    Grega Bremec
    Senior Administrator
    Noviforum Ltd., Software & Media
    http://www.noviforum.si/
--- rc.sysvinit-old     2004-06-23 08:37:12.000000000 +0200
+++ rc.sysvinit-new     2004-06-23 08:35:59.000000000 +0200
@@ -1,7 +1,5 @@
 #!/bin/sh
 #
-#!/bin/sh
-#
 # rc.sysvinit   This file provides basic compatibility with SystemV style
 #               startup scripts.  The SystemV style init system places 
 #               start/stop scripts for each runlevel into directories such as
@@ -42,14 +40,15 @@
   export prevlevel
 fi
 
-# Run kill scripts in the previous runlevel if not "none"
-if [ ! "$prevlevel" = "N" ]; then
-  for script in /etc/rc.d/rc$prevlevel.d/K* ; do
-    if [ -x $script ]; then
-      startup $script stop
-    fi
-  done
+# Run kill scripts
+if [ ! "$runlevel" = "S" ]; then
+  runlevel=1
 fi
+for script in /etc/rc.d/rc$runlevel.d/K* ; do
+  if [ -x $script ]; then
+    startup $script stop
+  fi
+done
 
 # Now do the startup scripts:
 for script in /etc/rc.d/rc$runlevel.d/S* ; do
#! /bin/sh

# This is an example of a start/stop script for SysV-style init, such
# as is used on Linux systems.  You should edit some of the variables
# and maybe the 'echo' commands.
#
# Place this file at /etc/init.d/postgresql (or
# /etc/rc.d/init.d/postgresql) and make symlinks to
#   /etc/rc.d/rc0.d/K02postgresql
#   /etc/rc.d/rc1.d/K02postgresql
#   /etc/rc.d/rc2.d/K02postgresql
#   /etc/rc.d/rc3.d/S98postgresql
#   /etc/rc.d/rc4.d/S98postgresql
#   /etc/rc.d/rc5.d/S98postgresql
# Or check out the chkconfig program, if you have it.
#
# Proper init scripts on Linux systems normally require setting lock
# and pid files under /var/run as well as reacting to network
# settings, so you should treat this with care.

# Original author:  Ryan Kirkpatrick <[EMAIL PROTECTED]>

# $Header: /home/projects/pgsql/cvsroot/pgsql/contrib/start-scripts/linux,v 1.1 
2001/02/08 19:53:33 petere Exp $

## EDIT FROM HERE

# Installation prefix
prefix=/export/software/postgresql

# Read database settings from this file:
SETTINGS_FILE=/export/software/postgresql/data_dirs

# Data directory
PGDATA="/export/work/data/pg"
export PGDATA

# Who to run pg_ctl as, should be "postgres".
PGUSER=postgres

# Where to keep a log file
PGLOG="/var/log/postgresql.log"

## STOP EDITING HERE

export PGDATA

# Check for echo -n vs echo \c
if echo '\c' | grep -s c >/dev/null 2>&1 ; then
    ECHO_N="echo -n"
    ECHO_C=""
else
    ECHO_N="echo"
    ECHO_C='\c'
fi

# The path that is to be used for the script
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# What to use to start up the postmaster
DAEMON="$prefix/bin/pg_ctl"

set -e

# Only start if we can find pg_ctl.
test -f $DAEMON || exit 0

# Source data directory locations upon startup (if they exist)
if [ -f "$SETTINGS_FILE" ]; then
    DATADIRS=". $SETTINGS_FILE; "
else
    unset DATADIRS
fi

# Parse command line parameters.
case $1 in
  start)
        $ECHO_N "Starting PostgreSQL: "$ECHO_C
        su - $PGUSER -c "${DATADIRS}env PGDATA=\"$PGDATA\" $DAEMON start -l $PGLOG" 
        echo "ok"
        ;;
  stop)
        echo -n "Stopping PostgreSQL: "
        su - $PGUSER -c "${DATADIRS}env PGDATA=\"$PGDATA\" $DAEMON stop -m fast"
        echo "ok"
        ;;
  restart)
        echo -n "Restarting PostgreSQL: "
        su - $PGUSER -c "${DATADIRS}env PGDATA=\"$PGDATA\" $DAEMON restart -m fast"
        echo "ok"
        ;;
  reload)
        echo -n "Reloading PostgreSQL: "
        su - $PGUSER -c "${DATADIRS}env PGDATA=\"$PGDATA\" $DAEMON reload"
        echo "ok"
        ;;
  status)
        su - $PGUSER -c "${DATADIRS}env PGDATA=\"$PGDATA\" $DAEMON status"
        ;;
  *)
        # Print help
        echo "Usage: $0 {start|stop|restart|reload|status}" 1>&2
        exit 1
        ;;
esac

exit 0
# This file should contain exported database directories for
# the PostgreSQL database engine.
#
# Each database location should have the following form:
#
# DB_DIR="/directory/where/it/lives"
# export DB_DIR
#
# Locations should be prepared with "initlocation(1)" prior
# to attempting to access them.
#
# DO NOT USE VARIABLE "PGDATA" AS IT IS DEFAULT SYSTEM DATABASE
# LOCATION AND WILL BE RESET AFTER SOURCING THIS CONFIGURATION!
#

# Example: REGISTRY_DB database (key registry)
#
#   With these two lines uncommented, you can use
#
#       CREATE DATABASE registry WITH LOCATION = 'REGISTRY_DB'
#
#   to create a database here.
#
#REGISTRY_DB="/export/key_registry"
#export REGISTRY_DB

Attachment: pgp0IzTGxhU6a.pgp
Description: PGP signature

Reply via email to