Рейтинг:0

Сценарий оболочки Ubuntu для запуска нескольких серверов Postgres

флаг ru

Я новичок в Ubuntu, и я пытаюсь написать сценарий .sh, который запускает 2 сервера postgres. Я отключил требование pw для sudo в /etc/sudoers

вот мой сценарий, и он, вероятно, неверен. test.sh:

#!/бин/баш
sudo su postgres
postgres -D /usr/local/mydb1 -p <номер порта> &
postgres -D /usr/local/mydb2/data -p <номер разностного порта> &

Результат, который я получаю после запуска скрипта:

shafin@shafin-VirtualBox:~/Desktop$ ./test.sh
postgres@shafin-VirtualBox:/home/shafin/Desktop$ 

Похоже, он выполняет только первую строку скрипта.

кто-нибудь может помочь?

Спасибо, Шафин

Рейтинг:2
флаг it

Твой sudo su postgres команда запускает новую оболочку под "постгрес" идентификатор пользователя. Эта новая оболочка не читает файл сценария, поэтому она никогда не увидит остальную часть файла.

Лучший способ (который работает) - удалить sudo su postgres команду, а перед оставшимися двумя строками напишите sudo -u постгрес. Читать человек sudo sudoers.

Shafin M avatar
флаг ru
Поэтому я попробовал эту строку: `sudo -u postgres -D /usr/local/capdb -p 8432 &` и ответ, который я получаю, таков: `использование: sudo -h | -К | -к | -В использование: sudo -v [-AknS] [-g группа] [-h хост] [-p приглашение] [-u пользователь] использование: sudo -l [-AknS] [-g группа] [-h хост] [-p приглашение] [-U пользователь] [-u пользователь] [команда] использование: sudo [-AbEHknPS] [-r роль] [-t тип] [-C номер] [-g группа] [-h хост] [-p приглашение] [-T время ожидания] [-u пользователь] [VAR=значение] [-i|-s] [] использование: sudo -e [-AknS] [-r роль] [-t тип] [-C номер] [-g группа] [-h хост] [-p приглашение] [-T тайм-аут] [-u пользователь] файл ...`
Shafin M avatar
флаг ru
Похоже, он ищет больше аргументов? Не уверен, что еще я должен передать здесь
флаг hr
@ShafinM `sudo -u postgres postgres -D /usr/local/capdb -p 8432 &` - первый `postgres` — это пользовательский аргумент для опции `sudo -u`; второй `postgres` - это команда
waltinator avatar
флаг it
Комментарии предназначены для НАС, чтобы задать ВАМ вопросы по вашему Вопросу. Вы должны [Изменить] свой вопрос, чтобы добавить информацию. Обновляя свой вопрос и используя кнопки форматирования, вы делаете всю информацию доступной для новых читателей.Людям не нужно читать длинную серию комментариев, чтобы понять всю историю.
Shafin M avatar
флаг ru
@steeldriver уже пробовал эту команду, bash отвечает неизвестной командой «postgres». Я точно знаю, что Postgres правильно настроен на этой машине, потому что я могу запускать серверы один за другим.
флаг hr
@ShafinM, где он находится? помните, что `sudo` использует свой собственный `secure_path`, который может отличаться от `PATH` вашей интерактивной оболочки. Если вы сомневаетесь, используйте абсолютный путь ex. `sudo -u postgres /путь/к/postgres `
Рейтинг:0
флаг ru

Спасибо @waltinator и @steeldriver за ваши отзывы.

Я смог найти решение, используя оба ваших предложения. Вот мой обновленный скрипт на случай, если кто-то захочет сделать что-то подобное:

#!/бин/баш

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 &

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.