Lo script si interrompe quando l'utente viene modificato


2

Sto cercando di creare uno script che registri come un altro utente per creare un backup del database. Finora ho riscontrato alcuni problemi, come dover inserire la sudopassword o non essere in grado di bypassare la richiesta della password per le credenziali del database PostgreSQL.

La mia sceneggiatura esegue le seguenti operazioni:

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

Quando eseguo questo script, cambia l'utente locale dell'utente postgrescome previsto, ma non esegue le altre righe finché non scrivo logout. Il prompt si blocca su:

-bash-4.1$

Qualsiasi aiuto sarebbe molto apprezzato. Sto usando RedHat.

Risposte:


0

Solo una prefazione, ma perché stai persino eseguendo questo script con sudoo addirittura cambiando utente? Presumo che tu voglia che funzioni in background, giusto? Allora perché non impostare semplicemente un processo cron per l' postgresutente? O perché stai addirittura passando postgresall'utente? Perché non eseguire semplicemente i backup come utente normale? L'utente sull'attuale sistema Linux stesso e le postgrescredenziali del database sono due cose diverse che conosci.

Detto questo, sulla tua domanda specifica:

Quando eseguo questo script, cambia il mio utente locale in quello postgres dell'utente come previsto ...

Sei sicuro che sia quello che succede? L'output di è whoamieffettivamente postgres? Lo dico perché non sono troppo chiaro su questa linea:

sudo su - postgres

Ciò sudo su -passa l'utente alla radice e quindi a quella postgresche segue ... Non sei sicuro di come la shell lo gestirà? Nella mia mente dovrebbe essere semplicemente questo:

sudo su postgres

Inoltre, guardando la risposta che "Barmar" fornisce qui su Stack Overflow , sembra che usare "qui documenti" —aka "qui documenti" potrebbe essere un altro modo per inviare comandi a quell'utente. Sapendo questo, ecco una riscrittura del tuo script che potrebbe funzionare:

#!/bin/bash
sudo su postgres <<'EOF'
cd /opt/app/backup
pg_dump --username=admin dbName > file.gz
EOF
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.