Script de démarrage de Systemd PostgreSQL


14

Je suis en train d'installer postgresql sur un deuxième serveur

Auparavant, j'installais postgresql, puis j'utilisais le script fourni

./contrib/start-scripts/linux

Placé dans le bon répertoire

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

Que je pourrais ensuite exécuter comme prévu avec

# service postgresql92 start

Cependant, la nouvelle machine utilise Systemd et il semble qu'il existe une manière complètement différente de le faire

Je ne veux pas pirater cela et ruiner quelque chose, alors je me demandais si quelqu'un pourrait me diriger dans la bonne direction pour obtenir le même résultat

Réponses:


21

Lors de l'installation à partir de la source, vous devrez ajouter un fichier d'unité systemd qui fonctionne avec l'installation source. Pour RHEL, Fedora, mon fichier d'unité ressemble à:

/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

Activez ensuite le service au démarrage et démarrez le service PostgreSQL:

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

6
# systemctl start postgresql.service

Certains environnements se traduiraient service <name> startpar systemctl start <name>.service, mais vous ne devez pas vous y fier.


Mais où placer le script postgresql92?
TheLovelySausage

Vous ne l'utilisez plus dans systemd. Votre distribution doit vous fournir le fichier de service postgresql systemd afin que vous puissiez démarrer le service.
Emeric

Le postgresql a cependant été installé à partir des sources, n'utilisant pas dnf car j'ai besoin d'installer 3 versions de postgres dans des répertoires spécifiques, est-il possible d'utiliser le fichier linux start-scripts fourni pour démarrer postgresql?
TheLovelySausage

Ma distribution ajoute ce script comme /usr/lib/systemd/system/postgresql.service. Les scripts de démarrage fournis par postgresql semblent couvrir uniquement SysV.
Emeric

avez-vous installé postgres en utilisant dnf ou yum?
TheLovelySausage

0

Le fichier d'unité systemctl publié ci-dessus m'aide beaucoup, mais pour créer celui dont vous avez besoin, il vous suffit de le mettre:

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

Pensez à changer le chemin binay pg_ctl en fonction de votre installation, et si vous souhaitez exécuter une autre instance, vous devez également changer le port d'écoute par défaut:

ExecStart=/usr/local/pgsql/bin/pg_ctl -o "-p 5489"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.