关于docker容器cron定时任务的执行

DullThinking

一、如何在容器中启用cron

这里我们列出集中用于定时的方案:

  1. 使用主机的cron实现定时任务
  2. 创建一个新容器专门执行定时任务
  3. 在原有容器上安装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

阅读 3.8k
12 声望
3 粉丝
0 条评论
你知道吗?

12 声望
3 粉丝
文章目录
宣传栏