>

다음과 같은 개발 환경을위한 프로비저닝 스크립트를 작성하고 있습니다 :

sudo su - postgres <<EOF
cd ~/data
pg_ctl -D . initdb
pg_ctl -D . -l run.log start
createdb mydb
pg_ctl -D . stop
EOF

다음 오류로 실패합니다 :

createdb: could not connect to database template1: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/run/postgresql/.s.PGSQL.5432"?

수동으로 명령을 실행하면 작동합니다. 나는 createdb 때  성공, 몇 가지 postgres 가 있습니다  프로세스는 종종 5 또는 6 개이므로 다음을 추가했습니다.

...
pg_ctl -D . -l run.log start
until [ `pgrep -c postgres` -gt 4 ]; do true; done
createdb mydb
...

그러나 pyzwyz를 의미하는 멈춤  스크립트 런타임 내에서 5 카운트를 넘지 않습니다. 또한 서브 쉘을 사용해 보았습니다 :

pgrep

성공하지 마십시오.

... (pg_ctl -D . -l run.log start) wait createdb mydb ...
  • 답변 # 1

    pg_ctl -D . -l run.log start 에 "-w"플래그를 추가해보십시오  명령, 그래서 pg_ctl  서버가 가동 된 후에 만 ​​리턴해야합니다. 그것이 효과가 있다면 문제는 당신의 createdb 였습니다.   pg_ctl 후 명령이 너무 빨리 실행되었습니다 , Postgres가 실제로 시작되어 연결을 수락하기 전에 이러한 명령이 수동으로 실행되는 대신 스크립트에서 실행될 때.

    (요청에 따라 답변으로 댓글을 다시 게시)

관련 자료

  • 이전 postgresql - postgres에서 중첩 루프를 비활성화하면 어떤 부작용이 있습니까?
  • 다음 mongodb - setprofiling에서 네임 스페이스가 너무 많이 발생합니다