zoukankan      html  css  js  c++  java
  • 给debian的docker容器添加crontab定时任务

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

    # cat /etc/issue
    Debian GNU/Linux 9 
     l
    

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

    RUN systemctl start nginx
    

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

    案例背景

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

    Dockerfile看起来是这样的

    FROM nginx:1.15.10
    MAINTAINER Ryan Miao 
    
    COPY sources.list   /etc/apt/sources.list
    RUN apt-get update  && apt-get install -y net-tools procps curl wget vim telnet cron 、
        && apt-get autoremove && apt-get clean && rm -rf /var/lib/apt/lists/*
    
    RUN mkdir -p /data/log/nginx  && mkdir -p /data/web && rm /etc/nginx/conf.d/default.conf
    ADD default.conf /etc/nginx/conf.d/
    ADD index.html  /data/web/
    
    ADD clean_log.sh /data/
    COPY clean-cron /etc/cron.d/clean-cron
    RUN chmod 755 /data/clean_log.sh && crontab /etc/cron.d/clean-cron
    
    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命令确实不熟悉的。

  • 相关阅读:
    OBS Studio使用日记——第一次使用黑屏
    了不起的网站链接
    【PTA】L1-006 连续因子 (20分)
    【PTA】L1-048 矩阵A乘以B (15分)
    【PTA】L1-034点赞
    【PTA】L1-028 判断素数 (10分)
    【PTA】L2-001 紧急救援 (25分)
    UEditor 富文本编辑器 上传图片 配置
    在存储过程中使用表变量实现批量导入
    SharePoint Designer 2013 开启新式验证(Modern Authentication)
  • 原文地址:https://www.cnblogs.com/woshimrf/p/docker-debian-crontab-install.html
Copyright © 2011-2022 走看看