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"
...脚本的其余部分
我一直在尝试运行命令
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"
...脚本的其余部分