我对 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 &