刘月兰 發表於 2019-8-15 20:59:00

给debian的docker容器添加crontab定时任务

<p><img src="https://timgsa.baidu.com/timg?image&amp;quality=80&amp;size=b9999_10000&amp;sec=1562932487&amp;di=49c894d0788145741cfcc79ac6825668&amp;imgtype=jpg&amp;er=1&amp;src=http%3A%2F%2Fimg1.ph.126.net%2FW8Byy6tz-KU_lnBFAzJJyw%3D%3D%2F6631470186956774044.png" alt="" loading="lazy"></p>
<p>现在大部分的docke镜像是基于debian</p>
<pre><code># cat /etc/issue
Debian GNU/Linux 9 \n \l
</code></pre>
<p>Docker容器是不支持后台服务的,像systemctl service crontab这些后台运行的服务是不能通过</p>
<pre><code>RUN systemctl start nginx
</code></pre>
<p>类似这种方案实现的,你必须写自己的entrypoint脚本来启动。本文记录了基于Debian的docker容器设置定时任务的方式。</p>
<h2 id="案例背景">案例背景</h2>
<p>我部署一个前端项目,使用nginx镜像,由于官方镜像是基于debian,对比alpine也不觉得体积差多少,于是就使用debian作为容器系统。</p>
<p>Dockerfile看起来是这样的</p>
<pre><code>FROM nginx:1.15.10
MAINTAINER Ryan Miao

COPY sources.list   /etc/apt/sources.list
RUN apt-get update&amp;&amp; apt-get install -y net-tools procps curl wget vim telnet cron 、
    &amp;&amp; apt-get autoremove &amp;&amp; apt-get clean &amp;&amp; rm -rf /var/lib/apt/lists/*

RUN mkdir -p /data/log/nginx&amp;&amp; mkdir -p /data/web &amp;&amp; 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 &amp;&amp; crontab /etc/cron.d/clean-cron

ENTRYPOINT nginx &amp;&amp; cron &amp;&amp;/bin/bash
</code></pre>
<p>大概就是安装cron,然后替换nginx config, 然后复制我们的静态文件,最后启动nginx, 启动cron。</p>
<p>说说为啥会有定时任务。可以看到我们是有定时清理脚本的,由于nginx自己没提供日志处理模块,所以才有清理脚本。清理脚本需要定时执行,于是就有定时任务,于是发现docker容器是不支持service的。</p>
<p>总的来说一共有以下几步:</p>
<p>install</p>
<pre><code>apt-get install cron
</code></pre>
<p>add to crontab</p>
<pre><code>crontab /etc/cron.d/your-crontab
</code></pre>
<p>docker启动时启动cron</p>
<pre><code>ENTRYPOINT cron &amp;&amp; xxxxx
</code></pre>
<p>ps, 很多人还是喜欢alpine做镜像母体的,因为小。但这个Linux命令确实不熟悉的。</p>


</div>
<div id="MySignature" role="contentinfo">
    <div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;关注我的公众号</p>
<img src="https://images2018.cnblogs.com/blog/686418/201808/686418-20180822091328437-1109977663.jpg">
</div>



唯有不断学习方能改变!
-- <b>Ryan Miao</b><br><br>
来源:https://www.cnblogs.com/woshimrf/p/docker-debian-crontab-install.html
頁: [1]
查看完整版本: 给debian的docker容器添加crontab定时任务