启动 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时提供实例名称