欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

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

程序员文章站 2022-03-18 13:26:49
现在大部分的docke镜像是基于debian # cat /etc/issue debian gnu/linux 9 \n \l docker容器是不...

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

# cat /etc/issue
debian gnu/linux 9 \n \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命令确实不熟悉的。

总结

以上所述是小编给大家介绍的给debian的docker容器添加crontab定时任务 ,希望对大家有所帮助