Het deel dat duidelijk fout is in je script is dat het de regels verwacht die volgen op de su - postgres
worden uitgevoerd als de postgre-gebruiker. Dit zal niet gebeuren.
In batchmodus, su - postgres
start en wordt onmiddellijk afgesloten omdat er geen commando aan wordt gegeven. Vervolgens worden de volgende opdrachten van de scripts uitgevoerd terwijl de gebruiker het script start (vermoedelijk root) en ze mislukken.
In plaats daarvan zou je zoiets als dit moeten schrijven:
su - postgres <<-'EOF'
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data/
/usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
/usr/local/pgsql/bin/createdb test
EOF
# the lines after the EOF will be executed again as the initial user
De suggesties in de opmerkingen gaan ervan uit dat je postgresql via een pakket hebt geïnstalleerd, maar dat is niet de context van de vraag. Wanneer u vanaf de bron installeert met ./configure
zonder argumenten en make install
, zal het nooit iets installeren buiten /usr/local/pgsql
. Het is volkomen normaal om geen opstartscript te hebben onder /etc
in deze context.