经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Docker » 查看文章
给debian的docker容器添加crontab定时任务
来源:jb51  时间:2019/8/16 12:35:36  对本文有异议

现在大部分的docke镜像是基于debian

  1. # cat /etc/issue
  2. Debian GNU/Linux 9 \n \l

Docker容器是不支持后台服务的,像systemctl service crontab这些后台运行的服务是不能通过

RUN systemctl start nginx

类似这种方案实现的,你必须写自己的entrypoint脚本来启动。本文记录了基于Debian的docker容器设置定时任务的方式。

案例背景

我部署一个前端项目,使用nginx镜像,由于官方镜像是基于debian,对比alpine也不觉得体积差多少,于是就使用debian作为容器系统。

Dockerfile看起来是这样的

  1. FROM nginx:1.15.10
  2. MAINTAINER Ryan Miao
  3.  
  4. COPY sources.list /etc/apt/sources.list
  5. RUN apt-get update && apt-get install -y net-tools procps curl wget vim telnet cron
  6. && apt-get autoremove && apt-get clean && rm -rf /var/lib/apt/lists/*
  7.  
  8. RUN mkdir -p /data/log/nginx && mkdir -p /data/web && rm /etc/nginx/conf.d/default.conf
  9. ADD default.conf /etc/nginx/conf.d/
  10. ADD index.html /data/web/
  11.  
  12. ADD clean_log.sh /data/
  13. COPY clean-cron /etc/cron.d/clean-cron
  14. RUN chmod 755 /data/clean_log.sh && crontab /etc/cron.d/clean-cron
  15.  
  16. ENTRYPOINT nginx && cron && /bin/bash

大概就是安装cron,然后替换nginx config, 然后复制我们的静态文件,最后启动nginx, 启动cron。

说说为啥会有定时任务。可以看到我们是有定时清理脚本的,由于nginx自己没提供日志处理模块,所以才有清理脚本。清理脚本需要定时执行,于是就有定时任务,于是发现docker容器是不支持service的。

总的来说一共有以下几步:

install

apt-get install cron

add to crontab

crontab /etc/cron.d/your-crontab

docker启动时启动cron

ENTRYPOINT cron && xxxxx

ps, 很多人还是喜欢alpine做镜像母体的,因为小。但这个Linux命令确实不熟悉的。

总结

以上所述是小编给大家介绍的给debian的docker容器添加crontab定时任务 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对w3xue网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号