5

Ubuntu10.04でSupervisorを使用してPostgreSQL9.1を実行したい。現時点では、initスクリプトを使用して手動でPostgreSQLを起動します。

/etc/init.d/postgresql start

この投稿によると:http://nicksergeant.com/using-postgresql-with-supervisor-on-ubuntu-1010/、UNIXソケットではなくTCPポートで実行されるようにPostgreSQL構成を変更する必要があります。 PostgreSQLをSupervisorと連携させます。

このアプローチに関して2つの質問があります。

  1. これがよりハッキングであることを考えると、これを行うことの意味(たとえば、セキュリティ/許可、パフォーマンスなど)はありますか?

  2. postgresqlスーパーバイザー構成で同じinitスクリプトを実行できないのはなぜですか?代わりに、上記のリンクに示されているように、実行されpostmasterますか?

更新

以下の両方の回答からの有用な提案のおかげで、SupervisorがPostgreSQLを直接呼び出すためのスクリプトを設定しました。

#!/bin/sh

# This script is run by Supervisor to start PostgreSQL 9.1 in foreground mode

if [ -d /var/run/postgresql ]; then
    chmod 2775 /var/run/postgresql
else
    install -d -m 2775 -o postgres -g postgres /var/run/postgresql
fi

exec su postgres -c "/usr/lib/postgresql/9.1/bin/postgres -D /var/lib/postgresql/9.1/main -c config_file=/etc/postgresql/9.1/main/postgresql.conf"

また、config:/etc/postgresql/9.1/main/start.confをに設定しmanualて、PostgreSQLが起動時に自動的に起動しないようにしました(ただし、この構成がロードされているかどうかはわかりません)。次に、postgresのスーパーバイザー構成を次のようにセットアップします。

[program:postgres]
user=root
group=root
command=/usr/local/bin/run_postgresql.sh
autostart=true
autorestart=true
stderr_logfile=/home/www-data/logs/postgres_err.log
stdout_logfile=/home/www-data/logs/postgres_out.log
redirect_stderr=true
stopsignal=QUIT

これで、正常に実行されるを実行supervisorctlしてPostgreSQLを起動できますstart postgresただし、を発行した後stop postgressupervisorctlpostgresが停止していることを宣言しましたが、psqlを実行できるため、サーバーはまだ実行されているようです。

これはスーパーバイザー構成の問題なのか、PostgreSQLの問題なのか疑問に思います。どんな提案も歓迎します!

4

3 に答える 3

2

スクリプトによるサービスの自動開始を回避するために/etc/init.d、postgresql 9.1 のパッケージには/etc/postgresql/9.1/main/start.conf以下を含むファイルが用意されています。

# 自動起動設定
# auto: init スクリプトでクラスターを自動的に開始/停止します
# manual: init スクリプトで開始/停止しませんが、手動での開始を許可します
# pg_ctlcluster
# 無効: pg_ctlcluster による手動起動を許可しない (これは簡単に
#回避され、小さな保護を目的としているだけです
# 事故)。

自動

/etc/init.d/postgresqlこれは、ブログ投稿が示唆するように移動するのではなく、自動開始を回避するために変更するファイルです 。

また、不足のために unix ソケット パラメータを変更することは/var/run/postgresql、最良のアイデアとは思えません。これは、libpq にリンクされたすべてのプログラムのデフォルトであり、パッケージのでシーケンスを開始/usr/share/postgresql-common/init.d-functions:

# create socket directory
if [ -d /var/run/postgresql ]; then
    chmod 2775 /var/run/postgresql
else
install -d -m 2775 -o postgres -g postgres /var/run/postgresql
fi

また、デフォルト値で問題が発生することはありませんが、postmaster最終的にフォアグラウンドに留まるか、フォークしてバックグラウンドで実行するかは、のsilent_modeパラメータによって制御されることに注意してくださいpostgresql.conf。オフになっていることを確認してください。

于 2012-06-19T02:09:01.213 に答える