Skrip start systemd postgresql

14

Saya sedang dalam proses menginstal postgresql ke server kedua

Sebelumnya saya menginstal postgresql dan kemudian menggunakan skrip yang disediakan

./contrib/start-scripts/linux

Ditempatkan di dir yang benar

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

Yang kemudian bisa saya jalankan seperti yang diharapkan dengan

# service postgresql92 start

Namun mesin baru menggunakan Systemd dan sepertinya ada cara yang sama sekali berbeda untuk melakukan ini

Saya tidak ingin meretas ini dan merusak sesuatu jadi saya bertanya-tanya apakah ada orang di luar sana yang bisa mengarahkan saya ke arah yang benar tentang bagaimana mencapai hasil yang sama

TheLovelySosisage
sumber

Jawaban:

21

Saat memasang dari sumber, Anda perlu menambahkan file unit systemd yang berfungsi dengan instalasi sumber. Untuk RHEL, Fedora file unit saya terlihat seperti:

/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

Kemudian aktifkan layanan saat startup dan mulai layanan PostgreSQL:

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

Beberapa lingkungan akan menerjemahkan service <name> startke systemctl start <name>.service, tetapi Anda tidak harus bergantung pada hal itu.

Emerik
sumber
Tapi di mana saya akan menempatkan skrip postgresql92?
TheLovelySausage
Anda tidak menggunakannya lagi di systemd. Distribusi Anda harus memberi Anda file layanan postd systemql sehingga Anda dapat memulai layanan.
Emeric
Postgresql diinstal dari source, tidak menggunakan dnf karena saya perlu menginstal 3 versi postgres di direktori tertentu, apakah mungkin menggunakan file linux skrip start-skrip yang disediakan untuk memulai postgresql?
TheLovelySausage
Distribusi saya menambahkan skrip ini sebagai /usr/lib/systemd/system/postgresql.service. Skrip awal yang disediakan oleh postgresql tampaknya hanya mencakup SysV.
Emeric
apakah Anda menginstal postgres menggunakan dnf atau yum?
TheLovelySausage
0

Diposting file systemctl unit di atas banyak membantu saya tetapi untuk membuat yang Anda butuhkan Anda hanya harus meletakkannya di:

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

Pikirkan tentang mengubah lintasan binay pg_ctl sesuai dengan pemasangan Anda, dan jika Anda ingin menjalankan contoh lain, Anda juga harus mengubah port mendengarkan default:

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