运行 "docker run" 来自 crontab
run "docker run" from crontab
我尝试在 docker 容器内从 postgresql 数据库 运行 进行自动(每晚 4 点)备份。
#!/bin/sh
CONTAINER=`docker ps|grep name_of_container|awk '{print }'`
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
包含正确的 docker id,当 运行 来自 cron 时,cron.log 和 output.log 被创建但为空。
有什么想法吗?
当来自 cron 的 运行 时无法使用 docker run -it --link [...]
- 我现在使用 docker run --link [...]
。
为了详细说明 Martin 的回答,-it
是 -i -t
的 shorthand,即 运行 交互式 [=17] =]终端(伪 TTY),因此在 cronjob 中 运行ning 没有必要。
如果该命令适合自动化,-it
应该不是必需的,因此删除它应该可以让您从 cron 作业中 运行 docker。
我尝试在 docker 容器内从 postgresql 数据库 运行 进行自动(每晚 4 点)备份。
#!/bin/sh
CONTAINER=`docker ps|grep name_of_container|awk '{print }'`
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
包含正确的 docker id,当 运行 来自 cron 时,cron.log 和 output.log 被创建但为空。
有什么想法吗?
当来自 cron 的 运行 时无法使用 docker run -it --link [...]
- 我现在使用 docker run --link [...]
。
为了详细说明 Martin 的回答,-it
是 -i -t
的 shorthand,即 运行 交互式 [=17] =]终端(伪 TTY),因此在 cronjob 中 运行ning 没有必要。
如果该命令适合自动化,-it
应该不是必需的,因此删除它应该可以让您从 cron 作业中 运行 docker。