O script pára quando o usuário é alterado

2

Eu estou tentando criar um script que registra como um usuário diferente para criar um backup de banco de dados. Até agora eu encontrei alguns problemas, como ter que inserir sudo password, ou não ser capaz de ignorar o prompt de senha para as credenciais do banco de dados PostgreSQL.

Meu script faz o seguinte:

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

Quando executo esse script, ele altera meu usuário local para o postgres user conforme o esperado, mas ele não executa as outras linhas até eu digitar logout . O prompt fica preso em:

-bash-4.1$

Qualquer ajuda seria muito apreciada. Eu estou usando RedHat.

    
por Lucas Brito 04.03.2015 / 23:24

1 resposta

0

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
    
por 04.03.2015 / 23:32