我们正在使用 cron 作业在 Ubuntu 12.04 上备份 Postgres 数据库。 pg_dump
命令已添加到已运行以备份 SQLite 的 bash 脚本中。命令是:
pg_dump -U postgres -Fc mydbname > /home/myback_$now #$now append last 2 digits of date to file name
在与 bash 脚本相同的主目录中创建了一个 .pgpass 文件:
localhost:5432:mydbname:postgres:mypassword
还有 chmod 600 .pgpass
。
问题是生成了备份文件,但是备份文件的大小都是0,在备份日志中,报错:
pg_dump: [archiver (db)] connection to database "mydbname" failed: fe_sendauth: no password supplied
pg_dump
似乎没有正确引用 .pgpass 中的密码。备份配置中可能缺少什么?
最佳答案
如果像您在评论中所说的那样
sudo crontab -e
那么你正在编辑 root 的 crontab,而不是你自己用户的 crontab。
因此,将使用的主目录将是 root 的主目录(通常是/root,但我不确定是否适用于 Ubuntu)。
虽然您没有明确说明,但我猜您将 .pgpass 文件放在了用户的主目录中。
以 root 身份运行 pg_backup 不是必需的,甚至不是一个好主意,因此我建议将备份作业放在普通用户的 crontab 中。
关于postgresql - 为什么 pg_dump 没有在 cron 作业中获取密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24542823/