当前位置: 首页 > 编程笔记 >

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

雍飞雨
2023-03-14
本文向大家介绍给debian的docker容器添加crontab定时任务,包括了给debian的docker容器添加crontab定时任务的使用技巧和注意事项,需要的朋友参考一下

现在大部分的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定时任务 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

 类似资料:
  • crontab 命令 Linux下的任务调度分为两类:系统任务调度和用户任务调度。 系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在 /etc 目录下有一个 crontab 文件,这个就是系统任务调度的配置文件。 系统任务调度存放的目录 /etc/cron.hourly 小时 /etc/cron.daily 每天 /etc/cron.weekly 每周 /etc/cro

  • 通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常适合周期性的日志分析或数据备份等工作。 19.1. 命令格式 crontab [-u user] filecrontab [-u user] [ -e | -l | -r ] 19.2. 命令参数 -u user:用来设定某个

  • 本文向大家介绍Docker 将容器添加到网络,包括了Docker 将容器添加到网络的使用技巧和注意事项,需要的朋友参考一下 示例 此命令将myAwesomeApp-1容器连接到app-backend网络。将容器添加到用户定义的网络时,嵌入式DNS解析器(它不是功能齐全的DNS服务器,并且不可导出)允许网络上的每个容器解析同一网络上的其他容器。此简单的DNS解析器在默认网桥bridge网络上不可用。

  • 我有一个Sinatra应用程序,在Docker中运行良好: 但是当我尝试添加Redis时: Redis似乎没有启动。 那么,将Redis添加到Ruby()Docker容器中的好方法是什么呢?

  • 我有一个docker容器,里面运行着一些进程(uwsgi和celery)。我想为这些进程创建一个celery用户和一个uwsgi用户,以及一个它们都将属于的worker组,以便分配权限。 我尝试将和添加到我的Dockerfile中,但这会导致问题,因为这些命令提示输入(我已经发布了下面构建的响应)。 将用户添加到Docker容器中以便为在容器中运行的工作者设置权限的最佳方法是什么? 我的Docke

  • 本文向大家介绍如何给一个正在运行的Docker容器动态添加Volume,包括了如何给一个正在运行的Docker容器动态添加Volume的使用技巧和注意事项,需要的朋友参考一下 之前有人问我Docker容器启动之后还能否再挂载卷,考虑mnt命名空间的工作原理,我一开始认为这很难实现。不过现在我认为是它实现的。 简单来说,要想将磁盘卷挂载到正在运行的容器上,我们需要: 使用nsenter将包含这个磁盘