Apenas um prefácio, mas por que você está executando esse script com sudo
ou até mesmo alternando usuários? Eu suponho que você quer que ele seja executado em segundo plano, certo? Então, por que não apenas definir uma tarefa cron para o usuário postgres
? Ou por que você está mudando para o usuário postgres
? Por que não apenas executar os backups como seu usuário comum? O usuário no próprio sistema Linux e as credenciais do banco de dados postgres
são duas coisas diferentes que você sabe.
Dito isso, na sua pergunta específica:
When I run this script, it changes my local user to the
postgres
user as expected…
Tem certeza de que é isso que acontece? A saída de whoami
na verdade postgres
? Eu digo isso porque não estou muito claro nesta linha:
sudo su - postgres
Esse sudo su -
muda o usuário para a raiz e, em seguida, o postgres
que o segue ... Não tem certeza de como o shell lidaria com isso? Na minha opinião, deveria ser simplesmente isso:
sudo su postgres
Além disso, olhando para a resposta “Barmar” fornece aqui no Stack Overflow , parece que está usando aqui documentos" —aka “Aqui docs - pode ser outro tato para enviar comandos para esse usuário. Sabendo disso, aqui está uma reescrita do seu script que pode funcionar:
#!/bin/bash
sudo su postgres <<'EOF'
cd /opt/app/backup
pg_dump --username=admin dbName > file.gz
EOF