Centos 7でPostgresql 9.3サーバーをセットアップしようとしています(yumを使用してインストール)。これは、私の場合、起動時にマウントされる暗号化パーティション(/ custom_container/database)です。特定の理由により、Postgresqlはマニュアルに記載されているとおりに動作せず、サービスの起動時にエラーが発生します。
注:私が設定したPGDATA環境変数を受け入れたくなく、実行時に
su - postgres -c '/usr/pgsql-9.3/bin/initdb'
(PGDATAディレクトリがpostgres:postgresによって所有されている場合)クラスターはデフォルトディレクトリ/var/lib/pgsql/9.3/data/内で初期化されます。
su - postgres -c '/usr/pgsql-9.3/bin/initdb --pgdata=$PGDATA'
これにより、使用しているカスタムコンテナー内のディレクトリが初期化されます。 PGDATA変数はデフォルトで取得されるとドキュメントが言っているので、これは私が理解できなかったものです。
問題:実行中
service postgresql-9.3 start
ログでエラーが発生する
postgresql-9.3.service - PostgreSQL 9.3 database server
Loaded: loaded (/usr/lib/systemd/system/postgresql-9.3.service; disabled)
Active: failed (Result: exit-code) since Mon 2014-11-10 15:24:15 CET; 1s ago
Process: 2785 ExecStartPre=/usr/pgsql-9.3/bin/postgresql93-check-db-dir ${PGDATA} (code=exited, status=1/FAILURE)
Nov 10 15:24:15 CentOS-70-64-minimal systemd[1]: Starting PostgreSQL 9.3 database server...
Nov 10 15:24:15 CentOS-70-64-minimal postgresql93-check-db-dir[2785]: "/var/lib/pgsql/9.3/data/" is missing or empty.
Nov 10 15:24:15 CentOS-70-64-minimal postgresql93-check-db-dir[2785]: Use "/usr/pgsql-9.3/bin/postgresql93-setup initdb" to initialize t...ster.
Nov 10 15:24:15 CentOS-70-64-minimal postgresql93-check-db-dir[2785]: See %{_pkgdocdir}/README.rpm-dist for more information.
Nov 10 15:24:15 CentOS-70-64-minimal systemd[1]: postgresql-9.3.service: control process exited, code=exited status=1
Nov 10 15:24:15 CentOS-70-64-minimal systemd[1]: Failed to start PostgreSQL 9.3 database server.
Nov 10 15:24:15 CentOS-70-64-minimal systemd[1]: Unit postgresql-9.3.service entered failed state.
つまり、新しい$ PGDATAディレクトリ(/ custom_container/database)でクラスターが初期化されていても、Postgresqlは引き続き/var/lib/pgsql/9.3/data/でクラスターを探します。
誰かが以前にこのPostgresqlの動作を経験しましたか?特定の設定オプションを忘れたか、Postgresqlのインストールに問題があるのでしょうか?
前もって感謝します!
実際の問題は、次のスレッドで作業していた環境変数の設定にあるようです: Centos 7のPostgresサービスの環境変数 問題はPGDATAですデフォルトのPGDATA変数を使用する/usr/lib/systemd/system/postgresql-9.3.serviceの内容から作成する必要があるカスタムの/etc/systemd/system/postgresql-9.3.service内に設定される変数。
postgresql.service
にカスタム/etc/systemd/system/
ファイルを作成する必要があります。これにより、デフォルトのPGDATA
環境変数が上書きされます。カスタムサービスファイルはデフォルトのpostgresqlサービスファイルを.include
できるため、変更するものを追加するだけで済みます。そうすれば、アップグレードでも変更/改善できますか?変更が保存されている間、デフォルトのサービスファイルにあるもの。
これは私がCentos 7で行った方法です。
cat <<END >/etc/systemd/system/postgresql.service
.include /lib/systemd/system/postgresql.service
[Service]
Environment=PGDATA=/mnt/postgres/data ## <== SET THIS TO YOUR WANTED $PGDATA
END
systemctl daemon-reload
systemctl restart postgresql.service
確認 :
ps -ax | grep [p]ostgres
更新:
ファイルを手動で作成して.include行を追加するのではなく、systemdの組み込み方法を使用することもできます。
systemctl edit postgresql.service
これにより、デフォルトのエディターが開き、変更内容が/etc/systemd/system/postgresql.service.d/override.conf
に保存されます
これを試して:
## Login with postgres user
su - postgres
export PGDATA=/your_path/data
pg_ctl -D $PGDATA start &
これを行うための最も「CentOS 7の方法」は、サービスファイルをコピーすることだと思います。
Sudo cp /usr/lib/systemd/system/postgresql-9.6.service /etc/systemd/system/postgresql-9.6.service
次に、ファイルを編集します/ etc/systemd/system/postgresql-9.6.service:
# Location of database directory
Environment=PGDATA=/mnt/volume/var/lib/pgsql/9.6/data/
次に、開始しますSudo systemctl start postgresql-9.6
および確認:
# Sudo ps -ax | grep postmaster
32100 ? Ss 0:00 /usr/pgsql-9.6/bin/postmaster -D /mnt/volume/var/lib/pgsql/9.6/data/
ファイル/etc/init.d/postgresql-9.3を編集してみてください:PGDATA =/your/custom/path