Jam*_*son 1 linux postgresql bash shell debian
我有一个脚本,该脚本在部署我的debian 6.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
Run Code Online (Sandbox Code Playgroud)
由于这是在部署上运行的,因此很难调试出问题所在,但是我可以看到postgres的下载和安装似乎可以正常进行。但是,我所知道的是postgres没有在服务器上运行。我想知道代码的后半部分是否有人能看到我做错的任何事情,这可能会导致这种情况?
您的脚本中明显错误的部分是它希望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
Run Code Online (Sandbox Code Playgroud)
注释中的建议假定您已通过软件包安装了postgresql,但这不是问题的内容。当您从不带./configure任何参数的源代码进行安装时make install,它将永远不会在外部进行任何安装/usr/local/pgsql。/etc在这种情况下,没有启动脚本是完全正常的。