2

Я пытаюсь создать сценарий, который регистрируется как другой пользователь для создания резервной копии базы данных. До сих пор я столкнулся с несколькими проблемами, такими как необходимость ввода пароля sudo или невозможность пропустить запрос пароля для учетных данных базы данных PostgreSQL.

Мой скрипт делает следующее:

#!/bin/bash
sudo su - postgres
cd /opt/app/backup
pg_dump --username=admin dbName > file.gz

Когда я запускаю этот скрипт, он меняет моего локального пользователя на пользователя postgres как и ожидалось, но он не выполняет другие строки, пока я не logout . Подсказка застревает на:

-bash-4.1$

Любая помощь будет принята с благодарностью. Я использую RedHat.

1 ответ1

0

Просто предисловие, но почему вы даже запускаете этот скрипт с sudo или даже переключаете пользователей? Я полагаю, вы хотите, чтобы он работал в фоновом режиме, верно? Тогда почему бы просто не установить работу cron для пользователя postgres ? Или почему вы вообще переключаетесь на пользователя postgres ? Почему бы просто не запускать резервные копии как обычный пользователь? Пользователь в самой системе Linux и учетные данные базы данных postgres - это две разные вещи, которые вы знаете.

Тем не менее, на ваш конкретный вопрос:

Когда я запускаю этот скрипт, он меняет моего локального пользователя на пользователя postgres как и ожидалось ...

Вы уверены, что это то, что происходит? Является ли вывод whoami самом деле postgres? Я говорю это, потому что мне не очень ясно в этой строке:

sudo su - postgres

Это sudo su - переключает пользователя в корень, а затем в postgres который следует за ним ... Не знаете, как оболочка справится с этим? На мой взгляд, это должно быть просто так:

sudo su postgres

Кроме того, глядя на ответ «Barmar», предоставленный здесь о переполнении стека, кажется, что использование «здесь документов» - «здесь документов» - может быть еще одним тактом для передачи команд этому пользователю. Зная это, вот переписать ваш скрипт, который может работать:

#!/bin/bash
sudo su postgres <<'EOF'
cd /opt/app/backup
pg_dump --username=admin dbName > file.gz
EOF

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .