【问题标题】:Bash Script to install PostgreSQL - Not working安装 PostgreSQL 的 Bash 脚本 - 不工作
【发布时间】:2012-12-10 21:37:47
【问题描述】:

我有一个脚本,它在部署我的 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。我想知道我的代码的最后一部分是否有人可以看到我做错的任何事情,这可能会导致这种情况?

【问题讨论】:

  • 只需从 shell 运行脚本,看看它是否会吐出错误。
  • PeeHaa 的建议是最好的主意。只是提供一个替代方案,如果您的 postgres 正在安装但未启动,请查看数据目录中的日志文件,因为它们可能包含与启动相关的错误。
  • 运行 sudo /etc/init.d/postgresql 启动并发布错误
  • 感谢您的所有回复。 @Baconator507 我明白了:sudo: /etc/init.d/postgresql: command not found
  • 尝试服务 postgresql 启动

标签: linux bash postgresql shell debian


【解决方案1】:

脚本中明显错误的部分是它希望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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 2020-04-09
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多