从crontab运行“docker run”

问题描述 投票:5回答:2

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

#!/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

我的crontab看起来像这样:

0 4 * * * /path/to/script.sh

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

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

  • 将变量写入日志文件
  • 检查来自crontab的输出(* * * * * [...] &>cron.log
  • 在脚本中检查来自docker exec [...] > output.log的输出

从cron运行时,$CONTAINER包含正确的docker id,cron.log和output.log被创建但是为空。

有任何想法吗?

cron docker
2个回答
4
投票

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


0
投票

为了详细说明Martin的答案,-it-i -t的简写,即在终端上进行交互式运行(伪TTY),因此没有必要在cronjob中运行。

如果该命令适合自动化,那么它应该是必要的,所以只需删除-it就可以让你从一个cron作业运行docker。


推荐问答