Системний сценарій запуску postgresql


14

Я зараз встановлюю postgresql на другий сервер

Раніше я встановив postgresql, а потім використовував наданий скрипт

./contrib/start-scripts/linux

Поміщений у правильний реж

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

Який тоді міг би виконати, як очікувалося

# service postgresql92 start

Однак нова машина використовує Systemd, і, схоже, існує зовсім інший спосіб зробити це

Я не хочу зламати це і щось руйнувати, тому мені було цікаво, чи хтось там може вказати мені в правильному напрямку, як досягти того ж результату

Відповіді:


21

При установці з джерела вам потрібно буде додати файл системного блоку, який працює з установкою джерела. Для RHEL, Fedora мій файл одиниці виглядає так:

/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

Потім увімкніть службу при запуску та запустіть службу 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

Деякі середовища перекладалися service <name> startб systemctl start <name>.service, але вам не потрібно покладатися на це.


Але де я б розмістив сценарій postgresql92?
TheLovelySausage

Ви більше не використовуєте його в systemd. Ваш дистрибутив повинен надати вам файл служби postgresql systemd, щоб ви могли запустити послугу.
Емерік

Postgresql був встановлений з джерела, але не використовуючи dnf, оскільки мені потрібно встановити 3 версії postgres у конкретних каталогах, чи можна використовувати наданий файл Linux для запуску postgresql за допомогою стартових скриптів?
TheLovelySausage

Мій дистрибутив додає цей сценарій як /usr/lib/systemd/system/postgresql.service. Стартові сценарії, надані postgresql, здаються, лише охоплюють SysV.
Емерік

ви встановили postgres за допомогою dnf чи yum?
TheLovelySausage

0

Опублікований файл одиничного systemctl вище мені дуже допомагає, але щоб створити потрібний вам потрібно просто поставити його:

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

Подумайте про зміну шляху binay pg_ctl відповідно до вашої установки, і якщо ви хочете запустити інший екземпляр, ви також повинні змінити порт прослуховування за замовчуванням:

ExecStart=/usr/local/pgsql/bin/pg_ctl -o "-p 5489"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.