shell脚本在cron作业中不起作用码头工人

时间:2020-10-21 04:57:44

标签: docker shell cron

我正在尝试自动化在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方式,则我的文件夹为空,

有人可以帮助我吗?

2 个答案:

答案 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并查看失败原因