시스템화된 postgresql 시작 스크립트

시스템화된 postgresql 시작 스크립트

두 번째 서버에 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를 사용하고 있으며 이를 수행하는 완전히 다른 방법이 있는 것처럼 보입니다.

나는 이것을 해킹하여 무언가를 망치고 싶지 않기 때문에 누구든지 동일한 결과를 얻는 방법에 대한 올바른 방향을 알려줄 수 있는지 궁금합니다.

답변1

소스에서 설치하는 경우 소스 설치에 사용되는 시스템 단위 파일을 추가해야 합니다. 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

답변2

# systemctl start postgresql.service

service <name> start일부 환경은 해당 환경으로 변환되지만 systemctl start <name>.service이에 의존할 필요는 없습니다.

답변3

위에 게시된 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"

관련 정보