【发布时间】:2021-02-03 23:26:21
【问题描述】:
我正在尝试自动化在 docker 中运行的 postgres 数据库备份,
#!/bin/bash
POSTGRES_USERNAME="XXX"
CONTAINER_NAME="YYY"
DB_NAME="ZZZ"
BACKUP="/tmp/backup/${DB_NAME}.sql.gz"
docker exec -it -u ${POSTGRES_USERNAME} ${CONTAINER_NAME} pg_dump -d ${DB_NAME} |
gzip -c > ${BACKUP}
exit
如果我手动运行它,我可以获得备份,但是如果我将脚本安排到 cronjob 中意味着,我得到的是空文件夹,
谁能帮帮我?
【问题讨论】:
-
您是否尝试过设置
$PATH或使用docker和gzip的完整路径? -
差异可能来自用于安排
cron作业的用户,可能与参与手动测试的用户不同。如果两个用户不同,则必须检查他们是否具有相同的权限,例如,所有用户都无法调用 docker。 -
您好@Biffen 非常感谢您的回复,是的,我也尝试过。但没有运气,我用下面的 PATH 测试了上面的脚本,但它备份了空目录 PATH=/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin :/root/bin:/bin/date:/usr/bin/aws:/bin/gzip:/usr/bin/pg_dump:/usr/bin/docker
-
你好@Romain 非常感谢你的回复,我同意你的观点,但我安排了 root 用户的 cronjob
-
@Antonynixson cron 通常会在作业向 STDERR 写入任何内容时发送电子邮件。看看你是否能找到那封电子邮件,它应该有助于排除故障。