启动 AWS EC2 实例时如何使用 bash 脚本运行 postgres?

Posted

技术标签:

【中文标题】启动 AWS EC2 实例时如何使用 bash 脚本运行 postgres?【英文标题】:How can I use a bash script to run postgres when launching AWS EC2 instance? 【发布时间】:2017-01-24 12:35:20 【问题描述】:

我正在测试 EC2 的一些设置以运行地理服务器。启动 EC2 实例时,我有一个 bash 脚本来加快速度。但是,当它达到创建 postgres 数据库的地步时,它会失败。下面是脚本的摘录,在第二行之后似乎失败了:

chown postgres /usr/local/pgsql/data
sudo su postgres
initdb -D /usr/local/pgsql/data
postgres -D /usr/local/pgsql/data &
exit

yum install gcc make gcc-c++ libtool libxml2-devel -y
# ..... etc etc

我已经通过 SSH 连接到一个实例并手动运行上述代码,然后从该实例创建了一个 AMI,该实例可以正常工作。我仍然想知道如何为 Amazon linux 制作一个也可以启动 postgres 的 bash 脚本。

【问题讨论】:

你得到的错误是什么? 使用 bash 脚本启动实例时,我找不到任何错误报告(请告诉我在哪里查看)。当脚本停止时,我可以大致告诉它失败的地方。 SSH 显示未安装 gcc 等,并且在 sudo su postgres 部分之后没有创建任何目录。 【参考方案1】:

您不能将sudo su postgres 放在脚本中以让 postgres 用户执行后续行。你需要这样写:

chown postgres /usr/local/pgsql/data

sudo -u postgres initdb -D /usr/local/pgsql/data
sudo -u postgres -D /usr/local/pgsql/data &

yum install ...

【讨论】:

第一个sudo -u postgres 有效,但sudo -u postgres -D /usr/local/pgsql/data & 行似乎使它挂起,并且添加exit 关闭了外壳。 删除了 exit 并意识到脚本后面还有另一个 exit。刚刚测试过,一切正常。

以上是关于启动 AWS EC2 实例时如何使用 bash 脚本运行 postgres?的主要内容,如果未能解决你的问题,请参考以下文章

在将带有 AWS 市场代码的 CentOS 根卷附加到其他 CentOS EC2 实例时,另一个实例使用附加的根卷启动

如何在使用Java AWS开发工具包创建AWS EC2时提供实例名称

AWS EC2 中的 MySQL - 它如何扩展?

从 EC2 上的自定义 AMI 创建 AWS Opsworks 实例时未启动

用于自动启动和停止 AWS EC2 实例的脚本

AWS EC2 启动配置用户数据 - 找不到命令