“运行”;docker run“;来自crontab

“运行”;docker run“;来自crontab,cron,docker,Cron,Docker,我尝试从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 "PGPASSWOR

我尝试从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的输出
$CONTAINER
从cron运行时包含正确的docker id,创建了cron.log和output.log,但为空


有什么想法吗?

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

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

如果该命令适用于自动化,
-it
应该不是必需的,因此删除它应该可以让您从cron作业中运行docker