【问题标题】:shell script is not working in cron job | dockershell 脚本在 cron 作业中不起作用 |码头工人
【发布时间】: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 或使用dockergzip 的完整路径?
  • 差异可能来自用于安排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 写入任何内容时发送电子邮件。看看你是否能找到那封电子邮件,它应该有助于排除故障。

标签: docker shell cron


【解决方案1】:

大家好,非常感谢您的即时回复,我想 我已经解决了我的问题。

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}  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    相关资源
    最近更新 更多