一、如何在容器中启用 cron
这里咱们列出集中用于定时的计划:
- 应用主机的 cron 实现定时工作
- 创立一个新容器专门执行定时工作
- 在原有容器上装置 cron,外面运行 2 个过程
上面我将具体介绍形式 1 的应用过程,对于形式二和形式 3 请参考:Docker cron 定时工作
二、应用宿主机的 cron 实现 docker 容器内的定时工作
1. 宿主机装置 crontab
# vixie-cron 软件包是 cron 的主程序
yum install vixie-cron
# crontabs 软件包是用来装置、卸装、或列举用来驱动 cron 守护过程的表格的程序
yum install crontabs
# 留神
# 如果在执行“yum install vixie-cron”中,遇到“No package vixie-cron available. Error: Nothing to do”,解决形式如下:yum -y install vim-enhanced.x86_64
2.crond 常用命令
service crond start // 启动服务
service crond stop // 敞开服务
service crond restart // 重启服务
service crond reload // 从新载入配置
service crond status // 查看状态
chkconfig crond on // 设置开机主动启动 crond 服务:
chkconfig –list crond // 开机级别的 crond 服务运行状况 ,2、3、4、5 级别开机会主动启动 crond 服务
chkconfig crond off// 勾销开机主动启动 crond 服务
crontab 常用命令
crontab -e 而后增加相应的工作,wq 存盘退出。crontab - e 配置是针对某个用户的,而编辑 /etc/crontab 是针对零碎的工作
crontab -l // 列出以后的所有调度工作
crontab -l -u jp // 列出用户 jp 的所有调度工作
crontab -r // 删除所有任务调度工作
3. 执行指定 docker 容器内的命令或脚本
#1. 创立定时执行脚本 test.sh
DOCKER_ID=be7d32f830fd
sudo docker exec -it $DOCKER_ID /bin/bash -c './config/test.sh'
# 2. 退出定时工作(每分钟执行一次)crontab -e
*/1 * * * * /root/docker-compose/curators/test.sh >> /root/docker-compose/curators/test.log
留神:1. 执行中波及的脚本及日志文件都须要赋权
2. 如果定时工作没有执行胜利,则查看定时工作输入日志
# 定时工作输入日志门路
cat /etc/crontab
# 该文件内前 4 行变量别离是:SHELL: 变量的值指定零碎应用的 SHELL 环境(该样例为 bash shell),PATH: 变量定义了执行命令的门路。MAILTO: Cron 的输入以电子邮件的模式发给 MAILTO 变量定义的用户名。如果 MAILTO 变量定义为空字符串(MAILTO=""),电子邮件不会被发送。HOME: 执行命令或脚本时 HOME 变量可用来设置基目录
3. 如果碰到谬误“the input device is not a TTY”, 解决形式如下
# sudo docker exec -it $DOCKER_ID /bin/bash -c './config/test.sh' 去掉‘t’sudo docker exec -i $DOCKER_ID /bin/bash -c './config/test.sh'
参考文献
crontab 装置及操作
docker 在容器外执行某个容器内的某个命令
linux 装置 crontab 报错:No package vixie-cron available. Error: Nothing to do
Docker 容器应用问题:Failed to get D-Bus connection: Operation not permitted
报错:the input device is not a TTY