2

私のdebian6.0サーバーがデプロイされたときに実行されるスクリプトがあり、ソースからpostgreSQLを構築し、そのシステムユーザーを作成し、データベースを作成して実行を開始するように設計されています。私はこれに不慣れですが、私はたくさんの宿題をしました、そしてこれは私が思いついたものです:

# Initial
    apt-get update
    apt-get -y install aptitude bzip2 libbz2-dev git-core bison flex
    aptitude -y install sudo python-all-dev python-setuptools libxml2-dev libgeoip-dev libxslt1-dev uuid-dev gcc automake autoconf libpcre3-dev libssl-dev unzip zip python-psycopg2 libpq-dev wget make libreadline-dev
    aptitude -y full-upgrade 


# POSTGRESQL
###############################

# Postgresql Download & Install
    wget http://ftp.postgresql.org/pub/source/v8.4.6/postgresql-8.4.6.tar.gz -P /tmp
    mkdir /tmp/postgresql
    tar xzf /tmp/postgresql-8.4.6.tar.gz -C "/tmp/postgresql"
    cd /tmp/postgresql/postgresql-8.4.6
    ./configure
    make
    make install

# Add User
    useradd postgres
    chown "postgres" /usr/local/pgsql
    mkdir /usr/local/pgsql/data
    chown postgres:postgres /usr/local/pgsql/data
    su - postgres
    /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data/
    /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
    /usr/local/pgsql/bin/createdb test

これはデプロイメントで実行されるため、何が問題になっているのかをデバッグするのは困難ですが、postgresのダウンロードとインストールは問題なく機能しているようです。しかし、私が知っているのは、postgresが私のサーバーで実行されていないということです。私のコードの最後の部分で、これを引き起こす可能性のある私が間違って行っていることを誰かが見ることができるかどうか疑問に思っていましたか?

4

1 に答える 1

5

スクリプトで明らかに間違っているのは、に続く行su - postgresがpostgresユーザーとして実行されることを期待していることです。これは起こりません。

バッチモードでsu - postgresは、コマンドが供給されないため、開始してすぐに終了します。次に、スクリプトの次のコマンドは、ユーザーがスクリプト(おそらくroot)を起動したときに実行され、失敗します。

代わりに、次のように書く必要があります。

su - postgres <<-'EOF'
  /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data/
  /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
  /usr/local/pgsql/bin/createdb test
EOF
# the lines after the EOF will be executed again as the initial user

コメントの提案は、パッケージを介してpostgresqlをインストールしたことを前提としていますが、それは質問のコンテキストではありません。./configure引数とを指定せずにソースからインストールするとmake install、外部に何もインストールされません/usr/local/pgsql/etcこのコンテキストで起動スクリプトがないのは完全に正常です。

于 2012-12-10T22:20:57.613 に答える