두 번째 서버에 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"