Попытка запустить скрипт postgres от имени другого пользователя из файла модуля, но переменная не передается

#!/bin/bash
for i in 1 2 3 4 5
do
    echo "Count $i"
done;

Лучше зациклить:

for i in {1..5}; do
    echo "Count $i";
done

Таким образом, вам не нужно указывать все эти номера. Итак, что бы вы сделали, если бы вам пришлось перебрать 100 чисел, используя ваш метод?

0
20.12.2019, 11:50
1 ответ

Похоже, невозможно использовать переменные среды с файлами модулей, когда вы пытаетесь запустить скрипт от имени другого пользователя. Права доступа к файлу модуля были root :root, а скрипт запускался как postgres :postgres.

Я даже пытался использовать файл EnvironmentFile в файле модуля, но в контейнере это тоже не удалось. Возможно, это связано с тем, что я использую замену SystemD из замены gdraheim/docker -systemctl -. Может быть, что-то еще, в любом случае служба не работала.

[Service]
EnvironmentFile=-/etc/sysconfig/dockerenv

В конце концов я добавил строку ExecStartPost в файл postgresql.service.

ExecStartPost=/bin/bash -c /usr/local/bin/psql.sh

Файл dockerenv создавался при загрузке с помощью сценария запуска, использующего следующее...

#Create EnvironmentFile for postgres user when running psql.sh
echo "DEV_ENV=\"${DEV_ENV}\"
PUID=${PUID}
GUID=${GUID}" > /etc/sysconfig/dockerenv

Затем сценарий psql.sh извлекает оттуда значения переменных при запуске.

#!/bin/bash
date
POS_ENV=$(cat /etc/sysconfig/dockerenv | awk -F= '/DEV_ENV/ { print $2 }' | awk 'gsub("\"","")') 
while [[ $(systemctl status postgresql.service | awk '/Active/sub("\\(","")  { print $3 }' | awk 'sub("\\)","")' ) != "running" ]]
do echo "Waiting on service to come up.";done

for i in ${POS_ENV[*]};do EX=$(psql -lt | cut -d\| -f1 | grep ${i,,})
echo "Creating ${i}"
if [[ ! ${EX} ]];then
        psql -c "CREATE DATABASE ${i};"
        psql -c "CREATE USER $i WITH PASSWORD '${i}'; GRANT ALL PRIVILEGES ON DATABASE $i TO ${i};"
fi;done
0
28.01.2020, 02:59

Теги

Похожие вопросы