สคริปต์เริ่มต้นของ Systemd postgresql


14

ฉันกำลังติดตั้ง postgresql บนเซิร์ฟเวอร์ตัวที่สอง

ก่อนหน้านี้ฉันติดตั้ง postgresql แล้วใช้สคริปต์ที่ให้มา

./contrib/start-scripts/linux

วางลงใน dir ที่ถูกต้อง

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

ซึ่งฉันสามารถดำเนินการตามที่คาดไว้ด้วย

# service postgresql92 start

อย่างไรก็ตามเครื่องใหม่ใช้ Systemd และดูเหมือนว่ามีวิธีที่แตกต่างอย่างสิ้นเชิงในการทำเช่นนี้

ฉันไม่ต้องการแฮ็คข้อมูลนี้และทำลายบางสิ่งบางอย่างดังนั้นฉันจึงสงสัยว่าใครก็ตามสามารถชี้ให้ฉันในทิศทางที่ถูกต้องว่าจะบรรลุผลลัพธ์เดียวกันได้อย่างไร

คำตอบ:


21

เมื่อติดตั้งจากแหล่งที่มาคุณจะต้องเพิ่มไฟล์ systemd unit ที่ทำงานกับการติดตั้งแหล่งที่มา สำหรับ 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 แก่คุณเพื่อให้คุณสามารถเริ่มบริการได้
Emeric

postgresql ถูกติดตั้งจากต้นทาง แต่ไม่ได้ใช้ dnf เพราะฉันต้องติดตั้ง postgres 3 เวอร์ชันในไดเรกทอรีเฉพาะเป็นไปได้ไหมที่จะใช้ไฟล์ linux สคริปต์เริ่มต้นที่ให้มาเพื่อเริ่ม 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"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.