我已经设置了一个 cron 作业来每小时备份数据库。
/etc/crontab
0 */1 * * * sh /opt/post.sh
/opt/post.sh
pg_dump -U postgres db_name > /home/golp/Desktop/backup.sql
为了进行身份验证,我使用.pgpass文件。
localhost:5432:db_name:postgres:password
关于权限,
chmod 0600 ~/.pgpass
chown postgres:postgres /home/golp/Desktop/
cron 作业似乎每小时运行一次(我检查了日志)。我发现 cron 作业创建的备份文件是空的。我正在使用CentOS 7 1503 和 Postgresql 9.5
笔记:当我pg_dump -U postgres db_name > /home/golp/Desktop/backup.sql
在终端以 root 用户身份运行时,备份会按预期创建。
请帮忙。
答案1
尝试在脚本中输入 pg_dump 的完整路径。
答案2
如果您手动修改文件/etc/crontab
,则需要添加如下条目(对于 root 用户):
0 * * * * root sh /opt/post.sh
您缺少root
运行 cron 作业所需的用户名。这是必需的,因为这是一个全局文件(与 下的每个用户文件不同/var/spool/cron/
)。
编辑:为了帮助诊断 cron 作业错误,您可以将 cron 作业行更改为:
0 * * * * root sh /opt/post.sh >> /tmp/cron.log 2>&1
这会将所有 stdout 和 stderr 消息重定向到文件/tmp/cron.log
(附加模式以便每次运行 cron 作业时不会覆盖它)。