【问题标题】:Why pg_dump was not getting the password in cron job?为什么 pg_dump 没有在 cron 作业中获取密码?
【发布时间】:2014-08-23 22:26:45
【问题描述】:

我们正在使用 cron 作业在 ubuntu 12.04 上备份 postgres 数据库。 pg_dump 命令已添加到 bash 脚本中,该脚本一直在运行以备份 sqlite。命令是:

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 中的密码。备份配置中可能缺少什么?谢谢。

【问题讨论】:

  • cron 以不同的用户身份运行命令,除非您通过 crontab -e 使用您的用户 crontab。您究竟是如何创建 cron 作业的以及在哪里创建的?你到底是在哪里创建 pgpass 文件的?
  • .pgpass 位于主目录中。我们使用 sudo crontab -e 创建 cron 作业。该工作适用于 sqlite3。 postgres 的作业是在同一个 bash 文件中的 sqlite3 作业之后添加的。
  • 哪个主目录?准确的路径。并显示完整的 crontab 行。
  • 根目录的主子目录。
  • /root/.pgpass ?那是确切的路径吗?并显示完整的 crontab 行

标签: postgresql cron backup


【解决方案1】:

如果如您在 cmets 中所述,您做到了

sudo crontab -e

那么你正在编辑 root 的 crontab,而不是你自己用户的 crontab。

因此,将使用的主目录将是 root 的主目录(通常是 /root,但我不确定是否适用于 Ubuntu)。

虽然您没有明确说明,但我猜您将 .pgpass 文件放在用户的主目录中。

以 root 身份运行 pg_backup 没有必要,甚至不是一个好主意,因此我建议将备份作业放在普通用户的 crontab 中。

【讨论】:

  • 对。 home 是root home(它是/home/myroot。我的root 是root 用户名)。 .pgpass 位于根目录中。奇怪的是它不起作用。
猜你喜欢
  • 2013-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多