Сценарий запуска systemd 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, и, похоже, для этого есть совершенно другой способ

Я не хочу взламывать это и разрушать что-то, поэтому мне было интересно, может ли кто-нибудь там указать мне правильное направление, как достичь того же результата

TheLovelySausage
источник

Ответы:

21

При установке из исходного кода вам нужно будет добавить системный файл systemd, который работает с исходной установкой. Для 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
NoelProf
источник
6
# systemctl start postgresql.service

Некоторые среды могут быть переведены service <name> startна systemctl start <name>.service, но вы не должны полагаться на это.

Эмерик
источник
Но где я могу разместить скрипт postgresql92?
TheLovelySausage
Вы больше не используете его в systemd. Ваш дистрибутив должен предоставить вам файл службы postgresql systemd, чтобы вы могли запустить службу.
Emeric
Postgresql был установлен из исходного кода, но без использования dnf, поскольку мне нужно установить 3 версии postgres в определенных каталогах. Можно ли использовать предоставленный файл linux start-scripts для запуска postgresql?
TheLovelySausage
Мой дистрибутив добавляет этот скрипт как /usr/lib/systemd/system/postgresql.service. Стартовые скрипты, предоставляемые postgresql, похоже, охватывают только SysV.
Emeric
вы установили 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"
Бертран Себадор
источник