Beim Booten PostgreSQL starten als User postgres

Hallo an alle!

Zur Zeit starte ich den PostgreSQL-Server mittels:

su - postgres
postgres -D /usr/local/pgsql/data > logfile 2>&1 &

Dann lauscht der Server auf Port 5432 und ich kann mich connecten mit pgAdmin3.

Nun will ich das natürlich auf meinem Fedora 11 Server nicht bei jedem Neustart eintippen.

Wie kann ich das erreichen, dass es automatisch startet?
Ich habe ein bisschen quer geschaut, das funktioniert nicht:

/sbin/chkconfig postgresql on

Wie mache ich das? Jemand Ideen?

Danke + Gruß PHANTOMIAS

Wie wäre es, wenn du ein fertiges RPM nimmst? Das liefert all diese Funktionalität schon mit.

Ansonsten darfst du dir ein Initscript basteln. In dem Verzeichnis mit den anderen Initscripts sollte es schon eine Vorlage geben, die du anpassen kannst.

Es gibt ja schon eins unter

/etc/init.d/postgresql

Das ich mit der Option

start

aufrufen kann.
Aber dann bin ich wohl root-User und nicht User postgres.

Zudem kommt da die Meldung:

/var/lib/pgsql/data is missing: Use "service posgresql initdb" to initialize the cluster first. [FEHLGESCHLAGEN]

Aber das liegt bei mir unter /usr/local/pgsql/data

Gruß PHANTOMIAS

Nun, Initscripte werden auch als root aufgerufen, das ist so vorgesehen.

Ggf. muss das Initscript dann den Benutzer wechseln.

Beim Lesen des vorhandenen init-Scripts wird auffallen, das hier der Aufruf unter dem User postgres (su postgres -c ‘pg_ctl -bla -blubb’) erfolgt. Zumindest bei meinen Susen hier. Wichtig ist hier noch im init-Skript den Pfad zum Datenverzeichnis korrekt zu übernehmen ( meist auf /var/pgsql oder ähnlich) falls man das anders haben will, muß man vorher die Systemvariable $PG_DATADIR setzen oder das Verzeichnis explizit reinschreiben.

Gruß Uwe

EDIT: $PGDATA heißt die Variable…
und so sieht der Aufruf im Script aus:

  start)
        echo -n "Starting PostgreSQL: "
        su - $PGUSER -c "$DAEMON -D '$PGDATA' &" >>$PGLOG 2>&1
        echo "ok"
        ;;

Vielen Dank für die Antworten.

Ich habe jetzt in /etc/profile ganz am Ende

PG_DATADIR = '/usr/local/pgsql/data'
export PG_DATADIR

aufgenommen und den Server neu gestartet.

Mache ich dann ein

/etc/init.d/postgresql start

erscheint die gleiche Meldung wie oben.

Schaue ich in die postgresql, so hängt es wohl an diesen Zeilen, dass dies false ergibt und diese Fehlermeldung erscheint.

#Check for the PGDATA structure
if [ -f "$PGDATA/PG_VERSION" ] && [ -d "$PGDATA/base" ]

Was muss ich noch anpassen?

Gruß PHANTOMIAS

Ich bin mir nicht sicher, ob die Init Scripte die Datei /etc/profile überhaupt auslesen. Diese Datei ist ja für interaktive Logins gedacht.

Wie ich im Edit geschrieben habe: (mindestens) den richtigen Variablennamen, sorry für das Versehen.

Grüssle Uwe

Kein Problem.

Ich habe PGDATA gesetzt in der /etc/profile und ein

echo $PGDATA

liefert auch das richtige Ergebnis:

/usr/local/pgsql/data

Aber dann ein

/etc/init.d/postgresql start

liefert wieder genau die gleiche Fehlermeldung.

Gruß PHANTOMIAS

http://www.pg-forum.de/konfiguration/3871-beim-booten-postgresql-starten-als-user-postgres.html#post20841

Ja, aber ich kann danach mit einem

echo $PGDATA

auf die Daten zugreifen. Also ist die Systemvariable doch gesetzt.

Und dann starte ich ja zur Zeit erst mit

/etc/init.d/postgresql start

Gruß PHANTOMIAS

Ah, im /etc/init.d/postgresql wird das wieder umgeschrieben, ich habe es nun geändert zu /usr/local/pgsql/data.

Aber jetzt erscheint beim Starten nur

postgresql-Dienst starten: [FEHLGESCHLAGEN]

Update: Im Logfile steht:

FATAL: konnte Sperrdatei >>postmaster.pid<< nicht erstellen: Keine Berechtigung.

Gruß PHANTOMIAS

Pg erstellt eine Datei, in der die PID des Servers steht. Vermutlich versucht er dies in einem Verzeichnis, wo er das nicht darf.

Grüssle Uwe

Und wie heißt die Datei? postmaster.pid?

Ein locate postmaster.pid ergibt:

/usr/local/pgsql/data/postmaster.pid

Wobei wenn ich in das Verzeichnis gehe, liegt da keine Datei mit dem Namen. postmaster.opts ist die einzigste “postmaster”-Datei.

Gruß PHANTOMIAS

Darf ich noch mal auf meine eingangs gestellte Frage zurückkommen, wieso du kein fertiges RPM verwendest? Das würde all die Probleme der letzten beiden Threadseiten auf einen Schlag erledigen.

Sorry, hatte vergessen darauf zu antworten.

Ganz einfach: Firmenpolitik, alles über yum ist Vorgabe. Wenn man das sinnvoll verwenden würde, aber da gabs in Vergangenheit Probleme, dass da jeder kreuz und quer installiert hat auf den Testservern und schwupps: Vorgaben an die sich jeder zu halten hat, und die heißt yum.

Gruß PHANTOMIAS

Ja, und? PostgreSQL gibt es als fertiges Paket, das man so installieren kann.
Oder übersehe ich da ein Problem?

Installation nur über “yum install xxx” erlaubt!

Ich habe dich schon verstanden. Ich verstehe nur nicht, warum man damit nun kein PostgreSQL-Paket installieren kann.

Und wenn man Vorschriften sehr weit treiben will: wenn ich eine neue Quelle in yum einfüge, kann ich dort beliebige Pakete herbekommen.

Jetzt verstehe ich dich nicht.
Ich mache doch “yum install postgresql-server”
-> das ist erlaubt laut Regelung.

Ein “rpm -i xxx” nicht.
-> nicht erlaubt laut Regelung.

Ich muss also vorerst so mit zurechtkommen und das lösen.