【问题标题】:Crontab doesn't backup postgre DB in docker, but if i run script by hand it work prorelyCrontab 不会在 docker 中备份 postgre DB,但如果我手动运行脚本,它会正常工作
【发布时间】:2021-10-18 17:49:18
【问题描述】:

我正在尝试为 postgre 数据库设置自动备份。 Postgre 在 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 中,但没有帮助


更新: 所以...备份脚本中的问题,日志中的错误说the input device is not a TTY

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

【问题讨论】:

  • 尝试在 crontab 上以 backup_script >> file.log 2>&1 的身份重定向到日志文件,或使用 mail 检查您的系统邮件。当 crontab 产生 stdout 或 stderror 消息时,曾经存在 Crontab 错误。 devanswers.co/you-have-mail-how-to-read-mail-in-ubuntu
  • @LMC 更新问题,日志显示the input device is not a TTY

标签: postgresql docker docker-compose cron


【解决方案1】:

使用以下内容更新您的 /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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-06
    • 2015-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    • 2021-12-27
    相关资源
    最近更新 更多