关于docker容器cron定时任务的执行
Posted DullThinking
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于docker容器cron定时任务的执行相关的知识,希望对你有一定的参考价值。
一、如何在容器中启用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
以上是关于关于docker容器cron定时任务的执行的主要内容,如果未能解决你的问题,请参考以下文章