Crontab 不会在 docker 中备份 postgre DB,但如果我 运行 手动编写脚本,它会正常工作

Crontab doesn't backup postgre DB in docker, but if i run script by hand it work prorely

我正在尝试为 postgre 数据库设置自动备份。 Postgre 运行ning 在 docker,所以我的备份脚本是:

docker-compose exec postgres -U user database_name | gzip > "/var/server/my_service/data/backup-db/db_backup.sql.gz"

如果我手动 运行 它工作正常。我为 crontab 编写了以下作业(每 5 分钟一次,仅用于测试):

*/5 * * * * cd /var/server/my_service && sh /var/server/my_service/data/backup/backup_script

这个命令也很好用,如果我 运行 它手动创建我可以使用的有效数据库备份。 但是 crontab 只是创建空存档,没有任何数据。我只是不明白为什么。 我的猜测是捕获 gzip 的输出流通常是在手动模式下生成的,但是当 crontab 尝试 运行 命令

时完全为空

我认为访问权限有问题并把它放在根 crontab 中,但它没有帮助


更新: 所以... backup_script 中的问题,日志中的错误显示 the input device is not a TTY

我尝试了 google 它并添加了 -T,但它也没有帮助

使用以下内容更新您的 /var/server/my_service/data/backup/backup_script

在脚本的前 3 行添加前缀:

#!/bin/bash
source ~/.bash_profile
cd /var/server/my_service

#
# rest of your script
#

您的 crontab 行应该是 (At 04:44 on every day-of-month):

44 4 */1 * * /var/server/my_service/data/backup/backup_script