Systemd postgresql script di avvio


14

Sto installando Postgresql su un secondo server

Precedentemente ho installato postgresql e poi ho usato lo script fornito

./contrib/start-scripts/linux

Inserito nella directory corretta

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

Che avrei potuto quindi eseguire come previsto

# service postgresql92 start

Tuttavia, la nuova macchina sta usando Systemd e sembra che ci sia un modo completamente diverso per farlo

Non voglio hackerare questo e rovinare qualcosa, quindi mi chiedevo se qualcuno là fuori potesse indicarmi la giusta direzione su come ottenere lo stesso risultato

Risposte:


21

Quando si installa da un sorgente, sarà necessario aggiungere un file di unità systemd che funzioni con l'installazione del sorgente. Per RHEL, Fedora il mio file di unità è simile a:

/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

Quindi abilitare il servizio all'avvio e avviare il servizio 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

Alcuni ambienti si tradurrebbero service <name> startin systemctl start <name>.service, ma non devi fare affidamento su di esso.


Ma dove posizionerei lo script postgresql92?
TheLovelySausage il

Non lo usi più in systemd. La tua distribuzione dovrebbe fornirti il ​​file di servizio postgresql systemd in modo da poter avviare il servizio.
Emeric

Il postgresql è stato installato dal sorgente, non usando dnf perché ho bisogno di installare 3 versioni di postgres in directory specifiche, è possibile utilizzare il file linux start-script fornito per avviare postgresql?
TheLovelySausage

La mia distribuzione aggiunge questo script come /usr/lib/systemd/system/postgresql.service. Gli script di avvio forniti da postgresql sembrano coprire solo SysV.
Emeric

hai installato postgres usando dnf o yum?
TheLovelySausage

0

Il file di unità systemctl pubblicato sopra mi aiuta molto, ma per creare quello che ti serve devi solo metterlo su:

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

Pensa a cambiare il percorso binay pg_ctl in base alla tua installazione e se vuoi eseguire un'altra istanza, devi anche cambiare la porta di ascolto predefinita:

ExecStart=/usr/local/pgsql/bin/pg_ctl -o "-p 5489"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.