Script de início do systemd postgresql

14

Estou no processo de instalação do postgresql em um segundo servidor

Anteriormente, instalei o postgresql e usei o script fornecido

./contrib/start-scripts/linux

Colocado no diretório correto

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

Que eu poderia executar como esperado com

# service postgresql92 start

No entanto, a nova máquina está usando o Systemd e parece que há uma maneira completamente diferente de fazer isso

Eu não quero cortar isso e estragar alguma coisa, então eu queria saber se alguém lá fora poderia me apontar na direção certa de como alcançar o mesmo resultado

TheLovelySausage
fonte

Respostas:

21

Ao instalar a partir da fonte, você precisará adicionar um arquivo de unidade systemd que funcione com a instalação da fonte. Para RHEL, Fedora, meu arquivo de unidade se parece com:

/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

Em seguida, ative o serviço na inicialização e inicie o serviço PostgreSQL:

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

Alguns ambientes seriam traduzidos service <name> startpara systemctl start <name>.service, mas você não precisa confiar nele.

Emeric
fonte
Mas onde eu colocaria o script postgresql92?
TheLovelySausage
Você não o usa mais no systemd. Sua distribuição deve fornecer o arquivo de serviço postgresql systemd para que você possa iniciar o serviço.
Emeric
No entanto, o postgresql foi instalado a partir da fonte, não usando o dnf porque eu preciso instalar 3 versões do postgres em diretórios específicos, é possível usar o arquivo linux start-scripts fornecido para iniciar o postgresql?
TheLovelySausage
Minha distribuição adiciona esse script como /usr/lib/systemd/system/postgresql.service. Os scripts de inicialização fornecidos pelo postgresql parecem cobrir apenas SysV.
Emeric
você instalou o postgres usando dnf ou yum?
TheLovelySausage
0

O arquivo de unidade systemctl publicado acima me ajuda muito, mas para criar o que você precisa, basta colocá-lo:

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

Pense em alterar o caminho binay pg_ctl de acordo com sua instalação e, se você quiser executar outra instância, também deverá alterar a porta de atendimento padrão:

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