Kịch bản bắt đầu hệ thống postgresql


14

Tôi đang trong quá trình cài đặt postgresql lên máy chủ thứ hai

Trước đây tôi đã cài đặt postgresql và sau đó sử dụng tập lệnh được cung cấp

./contrib/start-scripts/linux

Đặt vào đúng dir

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

Mà sau đó tôi có thể thực hiện như mong đợi với

# service postgresql92 start

Tuy nhiên, máy mới đang sử dụng Systemd và có vẻ như có một cách hoàn toàn khác để làm điều này

Tôi không muốn hack điều này và phá hỏng thứ gì đó vì vậy tôi tự hỏi liệu có ai ở ngoài đó có thể chỉ cho tôi đi đúng hướng làm thế nào để đạt được kết quả tương tự không

Câu trả lời:


21

Khi cài đặt từ nguồn, bạn sẽ cần thêm tệp đơn vị systemd hoạt động với cài đặt nguồn. Đối với RHEL, Fedora tệp đơn vị của tôi trông như sau:

/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

Sau đó kích hoạt dịch vụ khi khởi động và khởi động dịch vụ 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

Một số môi trường sẽ dịch service <name> startsang systemctl start <name>.service, nhưng bạn không cần phải dựa vào nó.


Nhưng tôi sẽ đặt tập lệnh postgresql92 ở đâu?
TheLovelySausage

Bạn không sử dụng nó nữa trong systemd. Phân phối của bạn sẽ cung cấp cho bạn tệp dịch vụ hệ thống postgresql để bạn có thể bắt đầu dịch vụ.
Emeric

Postgresql đã được cài đặt từ nguồn, mặc dù không sử dụng dnf vì tôi cần cài đặt 3 phiên bản postgres trong các thư mục cụ thể, có thể sử dụng tệp linux start-scripts được cung cấp để bắt đầu postgresql không?
TheLovelySausage

Phân phối của tôi thêm kịch bản này như /usr/lib/systemd/system/postgresql.service. Các kịch bản bắt đầu được cung cấp bởi postgresql dường như chỉ bao gồm SysV.
Emeric

bạn đã cài đặt postgres bằng dnf hay yum chưa?
TheLovelySausage

0

Tập tin đơn vị systemctl đã đăng ở trên giúp tôi rất nhiều nhưng để tạo tập tin bạn cần, bạn chỉ cần đặt nó vào:

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

Hãy suy nghĩ về việc thay đổi đường dẫn pg_ctl của binay theo cài đặt của bạn và nếu bạn muốn chạy một phiên bản khác, bạn cũng phải thay đổi cổng nghe mặc định:

ExecStart=/usr/local/pgsql/bin/pg_ctl -o "-p 5489"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.