Postgres 转储命令适用于 shell,但当我将其添加到 crontab 时则无效

Postgres dump command works on the shell, but not when I add it to a crontab

我一直在尝试运行命令

pg_dump -U database_username database_name > /path/to/directory/database_name.$(date +"%Y-%m-%d-%H:%M:%S").dump

当我在命令提示符下执行此命令时,此命令有效,但当我将其放入 crontab 时,它不会输出任何内容。这是为什么?

我还在主目录中定义了一个 .pgpass 文件,其中包含类似

的行
hostname:port:database_name:database_username:database_password

所以当我从命令提示符 运行 命令时,它不会提示我输入密码。我不确定 crontab 是否可以访问该文件。

如果你想 运行 你的脚本就好像你从 cron 直接连接到服务器一样,你应该 source 为您的环境。要设置的变量。例如。假设您 运行 与 pg_usr 用户一起使用 ksh:

10 03 * * * source /home/pg_usr/.kshrc ; my_postgre_shell

另一件事是 cron 可能不会设置与默认设置相同的 umask 当您直接连接时,导致对 [= 生成的文件的不同文件访问权限20=]cron 会话。所以你还必须设置所需的 umask:

10 03 * * * source /home/pg_usr/.kshrc ; umask 002 ; my_postgre_shell 

#!/bin/bash

导出 PGPASSFILE="/home/YOUR_LINUX_USER/.pg_pass"

...脚本的其余部分