通过 cronjob 执行 pg_dumpall 时如何解决错误代码 127?

Adr*_*ron 5 postgresql backup

我有这个简单的脚本来备份 postgres 中的所有数据库

    pg_dumpall -U pg_user > /tmp/tmp.txt
    DUMP_STATUS=$?
    echo "Dump status: $DUMP_STATUS" > /tmp/status.txt
Run Code Online (Sandbox Code Playgroud)

从命令行执行脚本时,转储状态为 0,并且正确创建了 tmp.txt 文件。

但是,如果我在 crontab 中将该脚本作为 cronjob 执行,则我的 tmp.txt 为空(所有数据库的转储失败),并且我的 status.txt 文件包含转储状态 127。

我注意到的一个奇怪的行为是 pg_dumpall 会将信息通过管道传输到文件中,但也会将其打印在终端上。我认为这种行为可能是问题的原因。

知道如何解决这个问题吗?

我正在运行 FreeBSD:

    > uname -mrs  
    FreeBSD 9.1-PRERELEASE amd64

    > psql -V
    psql (PostgreSQL) 9.1.7
    contains support for command-line editing
Run Code Online (Sandbox Code Playgroud)

fra*_*ncs 2

如果脚本可以脱离 crontab 工作,您应该确保以下几点:

  • 脚本文件包含必要的环境变量
    • $PGHOME
    • $PGDATA
    • $PGPORT
    • $PATH
  • 将标准错误输出到文件以供将来分析