![用于启动多个 Postgres 服务器的 Ubuntu shell 脚本](https://linux22.com/image/1023320/%E7%94%A8%E4%BA%8E%E5%90%AF%E5%8A%A8%E5%A4%9A%E4%B8%AA%20Postgres%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%20Ubuntu%20shell%20%E8%84%9A%E6%9C%AC.png)
我对 Ubuntu 还不太熟悉,我想写一个 .sh 脚本来启动 2 个 postgres 服务器。我在 /etc/sudoers 中禁用了 sudo 的密码要求
这是我目前的脚本,它可能不正确。test.sh
:
#!/bin/bash
sudo su postgres
postgres -D /usr/local/mydb1 -p <port no.> &
postgres -D /usr/local/mydb2/data -p <diff port no.> &
运行脚本后得到的结果:
shafin@shafin-VirtualBox:~/Desktop$ ./test.sh
postgres@shafin-VirtualBox:/home/shafin/Desktop$
看起来它只执行脚本的第一行。
有人可以帮忙吗?
谢谢,沙芬
答案1
您的sudo su postgres
命令将以“ postgres
”用户 ID 启动一个新的 shell。这个新 shell 不会从脚本文件中读取数据,因此它永远不会看到文件的其余部分。
一个更好的方法(可行的)是删除该sudo su postgres
命令,并在剩余的两行前面加上sudo -u postgres
。阅读man sudo sudoers
。
答案2
感谢@waltinator 和@steeldriver 的反馈。
我能够使用你们两个的建议找到解决方案。以下是我更新后的脚本,以防有人想做类似的事情:
#!/bin/bash
sudo -u postgres /usr/lib/postgresql/12/bin//postgres -D /usr/local/mydb1 -p 8432 &
sudo -u postgres /usr/lib/postgresql/12/bin//postgres -D /usr/local/mydb2/data -p 6432 &