运行"码头运行"来自crontab

时间:2015-08-01 20:51:10

标签: cron docker

我尝试在docker容器内运行的postgresql数据库中进行自动化(每晚4点)备份。

Jk! krz duh brx itnsl?

我的crontab看起来像这样:

#!/bin/sh

CONTAINER=`docker ps|grep name_of_container|awk '{print $1}'`
USER='postgre_user'
PASSWORD='changed'
BUDIR='/some/path/backup/'

docker run -it --link $CONTAINER:db -v $BUDIR:/backup/ -e "PGPASSWORD=$PASSWORD" pg_dump -h db -U $USER -Fc -f /backup/$(date +%Y-%m-%d-%H-%M-%S).dump

当我手动执行它时脚本工作正常,它也从cron执行(我试过* * * * *进行调试)。

我无法弄清楚如何让cron和脚本一起工作。到目前为止我试过了:

  • 将变量写入日志文件
  • 检查来自crontab(0 4 * * * /path/to/script.sh
  • 的输出
  • 检查脚本中* * * * * [...] &>cron.log的输出
从pron运行时,

docker exec [...] > output.log包含正确的docker id,cron.log和output.log已创建但为空。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

从cron运行时无法使用docker run -it --link [...] - 我现在使用docker run --link [...]

答案 1 :(得分:0)

要详细说明马丁的答案,-it-i -t的简写,即在终端(伪TTY)上交互式运行 ,因此不是在cronjob中运行是必需的。

如果该命令适合自动化,那么它是必需的,因此只需删除-it就可以使您从cron作业中运行docker。