gpt4 book ai didi

linux - 用于安装 PostgreSQL 的 Bash 脚本 - 不工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:30:11 24 4
gpt4 key购买 nike

我有一个脚本,它在部署我的 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

由于这是在部署时运行的,因此很难调试出了什么问题,但我可以看到 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

评论中的建议假定您已经通过软件包安装了 postgresql,但这不是问题的上下文。当您使用不带参数的 ./configuremake install 从源代码安装时,它永远不会在 /usr/local/pgsql 之外安装任何东西。在这种情况下,/etc 下没有启动脚本是完全正常的。

关于linux - 用于安装 PostgreSQL 的 Bash 脚本 - 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13809684/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com