저는 Voidlinux, 특히 runit을 이해하려고 노력하고 있습니다. Void에는 저장소에 postgresql v9가 있으며 더 새로운 것이 필요하여 소스에서 v12를 컴파일했습니다. 잘 작동하지만 지금은 이에 대한 runit 서비스를 만드는 데 어려움을 겪고 있습니다. 설명서를 읽고 Google에서 검색한 결과 다음과 같습니다.
# /etc/sv/postgresql/run
#!/bin/sh
exec chpst -u postgres /usr/local/pgsql/bin/pg_ctl -D /var/lib/postgresql/data -l /var/lib/postgresql/logfile start 2>&1
# I've also tried postmaster command, which doesn't work even as standalone, whereas I'm able to launch the server by hand with the command above
나는 또한 빈 디렉토리를 생성 /run/runit/supervise.postgresql
하고 그것을 /etc/sv/postgresql
(그리고 그것 없이) 연결해 보았습니다.
다시 시작하거나 서비스를 수동으로 시작하려고 하면 다음과 같은 출력이 표시됩니다.
waiting for server to start.... done
server started
pg_ctl: another server might be running; trying to start server anyway
waiting for server to start.... stopped waiting
pg_ctl: could not start server
Examine the log output.
그런 다음 마지막 4줄은 결과 없이 무한 루프로 반복됩니다. 콘텐츠 /var/lib/postgresql/logfile
:
2019-05-10 08:11:15.859 CEST [1138] FATAL: lock file "postmaster.pid" already exists
2019-05-10 08:11:15.859 CEST [1138] HINT: Is another postmaster (PID 760) running in data directory "/var/lib/postgresql/data"?
2019-05-10 08:11:16.964 CEST [1211] FATAL: lock file "postmaster.pid" already exists
2019-05-10 08:11:16.964 CEST [1211] HINT: Is another postmaster (PID 760) running in data directory "/var/lib/postgresql/data"?
2019-05-10 08:11:18.070 CEST [1215] FATAL: lock file "postmaster.pid" already exists
2019-05-10 08:11:18.070 CEST [1215] HINT: Is another postmaster (PID 760) running in data directory "/var/lib/postgresql/data"?
감사해요.
답변1
그래서 마침내 문제를 해결했고, 같은 문제를 겪고 있는 분들을 위한 답변이 여기에 있습니다. 이 오류는 실제로 매우 어리석은 일이었지만 로깅이 void에서 어떻게 작동하는지 이해한 후에야 이 오류를 발견했으며 어떻게든 syslog(postgres 로그가 아닌)만이 실제로 읽기에 대한 오류를 표시했기 때문에 이 방법으로 Digging을 시작했고 마침내 다음과 같은 사실 SSL is not supported in this build
을 깨달았습니다. -l
서비스 실행 명령의 플래그는 필요하지 않은 SSL을 강제합니다. 그래서 내가 사용한 실행 파일은 다음과 같습니다.
# /etc/sv/postgresql/run:
#!/bin/sh
exec chpst -u postgres:postgres /usr/local/pgsql/bin/postgres -D '/var/lib/postgresql/data' 2>&1
/etc/sv/postgresql/log
또한 폴더를 생성하고 그 안에 다음 콘텐츠가 포함된 파일( )을 생성하여 서비스에 대한 로깅을 활성화합니다 /etc/sv/postgresql/log/run
.
#!/bin/sh
exec logger -p daemon.info -t postgres
또한 실제로 로그를 저장하기 위해 syslog 데몬을 설치합니다(예: socklog-void).