用于启动多个 Postgres 服务器的 Ubuntu shell 脚本

用于启动多个 Postgres 服务器的 Ubuntu shell 脚本

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

相关内容