Systemd postgresql Startskript

14

Ich bin gerade dabei, postgresql auf einem zweiten Server zu installieren

Zuvor habe ich postgresql installiert und dann das mitgelieferte Skript verwendet

./contrib/start-scripts/linux

In die richtige Richtung gebracht

# cp ./contrib/start-scripts/linux /etc/rc.d/init.d/postgresql92
# chmod 755 /etc/rc.d/init.d/postgresql92

Was ich dann erwartungsgemäß mit ausführen könnte

# service postgresql92 start

Die neue Maschine verwendet jedoch Systemd und es sieht so aus, als gäbe es eine völlig andere Möglichkeit, dies zu tun

Ich möchte das nicht hacken und etwas ruinieren, also habe ich mich gefragt, ob mich jemand in die richtige Richtung weisen könnte, um das gleiche Ergebnis zu erzielen

TheLovelySausage
quelle

Antworten:

21

Bei der Installation von der Quelle müssen Sie eine systemd-Unit-Datei hinzufügen, die mit der Quellinstallation zusammenarbeitet. Für RHEL, Fedora sieht meine Unit-Datei so aus:

/usr/lib/systemd/system/postgresql.service

[Unit]
Description=PostgreSQL database server
After=network.target

[Service]
Type=forking

User=postgres
Group=postgres

# Where to send early-startup messages from the server (before the logging
# options of postgresql.conf take effect)
# This is normally controlled by the global default set by systemd
# StandardOutput=syslog

# Disable OOM kill on the postmaster
OOMScoreAdjust=-1000
# ... but allow it still to be effective for child processes
# (note that these settings are ignored by Postgres releases before 9.5)
Environment=PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj
Environment=PG_OOM_ADJUST_VALUE=0

# Maximum number of seconds pg_ctl will wait for postgres to start.  Note that
# PGSTARTTIMEOUT should be less than TimeoutSec value.
Environment=PGSTARTTIMEOUT=270

Environment=PGDATA=/usr/local/pgsql/data


ExecStart=/usr/local/pgsql/bin/pg_ctl start -D ${PGDATA} -s -w -t ${PGSTARTTIMEOUT}
ExecStop=/usr/local/pgsql/bin/pg_ctl stop -D ${PGDATA} -s -m fast
ExecReload=/usr/local/pgsql/bin/pg_ctl reload -D ${PGDATA} -s

# Give a reasonable amount of time for the server to start up/shut down.
# Ideally, the timeout for starting PostgreSQL server should be handled more
# nicely by pg_ctl in ExecStart, so keep its timeout smaller than this value.
TimeoutSec=300

[Install]
WantedBy=multi-user.target

Aktivieren Sie dann den Dienst beim Start und starten Sie den PostgreSQL-Dienst:

$ sudo systemctl daemon-reload # load the updated service file from disk
$ sudo systemctl enable postgresql
$ sudo systemctl start postgresql
NoelProf
quelle
6
# systemctl start postgresql.service

Einige Umgebungen würde übersetzen service <name> startzu systemctl start <name>.service, aber Sie müssen sich nicht auf sie verlassen.

Emeric
quelle
Aber wo würde ich das postgresql92-Skript platzieren?
TheLovelySausage
Sie verwenden es nicht mehr in systemd. Ihre Distribution sollte Ihnen die Service-Datei postgresql systemd zur Verfügung stellen, damit Sie den Service starten können.
Emeric
Das postgresql wurde aus dem Quellcode installiert, ohne dnf zu verwenden, da ich 3 Versionen von postgres in bestimmten Verzeichnissen installieren muss. Ist es möglich, die mitgelieferte Startskript-Linux-Datei zu verwenden, um postgresql zu starten?
TheLovelySausage
Meine Distribution fügt dieses Skript als hinzu /usr/lib/systemd/system/postgresql.service. Die von postgresql bereitgestellten Start-Skripte scheinen nur zu behandeln SysV.
Emeric
hast du postgres mit dnf oder yum installiert?
TheLovelySausage
0

Die obige Datei systemctl unit hilft mir sehr, aber um die Datei zu erstellen, die Sie benötigen, müssen Sie sie nur anlegen:

/etc/systemd/system/postgresql92.service
systemctl enable postgresql92.service
systemctl start postgresql92.service

Denken Sie daran, den Pfad von binay pg_ctl entsprechend Ihrer Installation zu ändern. Wenn Sie eine andere Instanz ausführen möchten, müssen Sie auch den Standard-Listening-Port ändern:

ExecStart=/usr/local/pgsql/bin/pg_ctl -o "-p 5489"
Bertrand Cebador
quelle