我正在尝试创建一个以不同用户身份登录的脚本来创建数据库备份。到目前为止,我遇到了一些问题,例如必须输入sudo
密码,或者无法绕过 PostgreSQL 数据库凭据的密码提示。
我的脚本执行以下操作:
#!/bin/bash
sudo su - postgres
cd /opt/app/backup
pg_dump --username=admin dbName > file.gz
当我运行此脚本时,它会postgres
按预期将我的本地用户更改为用户,但直到我输入时它才会执行其他行logout
。提示卡在:
-bash-4.1$
任何帮助都将不胜感激。我正在使用 RedHat。
答案1
只是一个前言,但你为什么要运行这个脚本,sudo
甚至切换用户?我猜你想让它在后台运行,对吧?那为什么不直接为用户设置一个 cron 作业呢postgres
?或者你为什么要切换到用户postgres
?为什么不以普通用户的身份运行备份?postgres
你知道,实际 Linux 系统上的用户和数据库凭据是两码事。
话虽如此,回到你的具体问题:
当我运行此脚本时,它会
postgres
按预期将我的本地用户更改为用户……
你确定这是真的吗?whoami
其实postgres
?我这么说是因为我不太清楚这句话:
sudo su - postgres
这sudo su -
会将用户切换到 root,然后是postgres
后面的那个…不确定 shell 会如何处理?在我看来,应该只是这样:
sudo su postgres
此外,“Barmar” 在 Stack Overflow 上提供的答案,好像使用“此处有文件”—又名“此处文档”—可能是向该用户发送 pip 命令的另一种策略。了解这一点后,下面是可能有效的脚本重写版本:
#!/bin/bash
sudo su postgres <<'EOF'
cd /opt/app/backup
pg_dump --username=admin dbName > file.gz
EOF