我正在尝试自动化在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方式,则我的文件夹为空,
有人可以帮助我吗?
答案 0 :(得分:0)
大家好,非常感谢您的即时反应,我认为 我已经解决了我的问题。
Cronjob由于--interactive模式而失败
docker exec -it -u ${POSTGRES_USERNAME} ${CONTAINER_NAME} pg_dump -d ${DB_NAME} | gzip -c > ${BACKUP}
从shell脚本中删除了i --interactive,那么它非常完美。
docker exec -t -u ${POSTGRES_USERNAME} ${CONTAINER_NAME} pg_dump -d ${DB_NAME} | gzip -c > ${BACKUP}
答案 1 :(得分:-1)
在运行的shell脚本中使用absolute paths
。
cd
到脚本中docker-comose.yml
之前的docker-compose
的绝对路径,并在需要时使用该绝对路径。
您的$PATH
可能与交互式shell不同。您可以添加set -x
并查看失败原因