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

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

6
# systemctl start postgresql.service

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


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"
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.