给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定时任务 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
相关推荐
-
Linux中crontab定时任务不执行的原因
最近在linux中遇到了个crontab定时任务不执行的case,在这给大家分享一下,避免踩到我遇到的坑. 先贴脚本吧 为了方便展示,把脚本入参,都写死了 #!/usr/bin/env bash # 1输出文件,到log 例如: bg # 2 目标文件目录 不带最后的/ 例如:/opt/flume/home/hdp_lbg_ectech/rawdata/xxx/web_vip_bg # 3 执行的时候选择前几天的日志 例如:1 LAST_DAY=$(date +"%Y-%m-%d" -
-
crontab定时任务不执行的一些原因总结
前言 最近在工作中遇到了一些问题,crontab定时任务居然不执行,后来我在网上找的时候发现网上主要说了这5个原因: 1 crond服务未启动 crontab不是Linux内核的功能,而是依赖一个crond服务,这个服务可以启动当然也可以停止.如果停止了就无法执行任何定时任务了,解决的方法是打开它: crond 或 service crond start 如果提示crond命令不存在,可能被误删除了,CentOS下可以通过这个命令重新安装: yum -y install crontabs 2 权
-
linux定时任务crontab 实现每秒执行一次的方法
linux crontab 命令,最小的执行时间是一分钟.如需要在小于一分钟内重复执行,可以有两个方法实现. Cron 各项的描述 以下是 crontab 文件的格式: {minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script} o minute: 区间为 0 – 59 o hour: 区间为0 – 23 o day-of-month: 区间为0 – 31 o month: 区间为1 – 12.
-
使用django-crontab实现定时任务的示例
今天打算在自己的 Django 应用中添加一个定时任务来定时执行一些定期检查的功能,因此想到了使用 django-crontab 插件可以满足我的需求,下面就是这个插件的使用方法. 首先使用pip安装 django-crontab 插件 pip install django-crontab 创建要定期执行的脚本和方法,这里假设脚本名称叫cron.py,内容如下: #!/usr/bin/env python # -*- coding: utf-8 -*- def check(): print "h
-
Linux Crontab Shell脚本实现秒级定时任务的方法
一.编写Shell脚本crontab.sh #!/bin/bash step=1 #间隔的秒数,不能大于60 for (( i = 0; i < 60; i=(i+step) )); do $(php '/home/www/php/crontab/crontab.php') sleep $step done exit 0 二.crontab -e 输入以下语句,然后:wq 保存退出 # m h dom mon dow command * * * * * /home/www/php/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镜像,由于官方镜像是基于
-
docker容器中crontab无法正常运行解决方案
相信很多人看完docker容器, 需要加crontab, 加完却发现不能执行,心塞.....接着便开始各种折腾... 首先当然是看日志了, 发现/var/log 下面没有任何信息, 那是因为你没有打开rsyslog. # /etc/init.d/rsyslog start 继续看日志 # tail /var/log/crond Dec 29 16:39:01 web01-50794 crond[2839]: (root) FAILED to open PAM security session (
-
如何给一个正在运行的Docker容器动态添加Volume
之前有人问我Docker容器启动之后还能否再挂载卷,考虑mnt命名空间的工作原理,我一开始认为这很难实现.不过现在我认为是它实现的. 简单来说,要想将磁盘卷挂载到正在运行的容器上,我们需要: 使用nsenter将包含这个磁盘卷的整个文件系统mount到临时挂载点上: 从我们想当作磁盘卷使用的特定文件夹中创建绑定挂载(bind mount)到这个磁盘卷的位置: umount第一步创建的临时挂载点. 注意事项 在下面的示例中,我故意包含了$符号来表示这是Shell命令行提示符,以帮助大家区分哪些是你
-
docker容器内要启动两个进程时Dockerfile的实现代码
近期想做一个cron定时任务的docker,在Dockerfile中做如下定义 FROM library/alpine:latest RUN apk --update add rsync openssh bash VOLUME ["/data"] ADD start.sh / CMD ["/bin/bash","/start.sh"] 在start.sh中用crontab 加载定时任务run.cron,然后启动crond: /usr/bin/cr
-
在Docker容器中不需要运行sshd的原因浅析
当开始使用Docker时,人们经常问:"我该如何进入容器?",其他人会说"在你的容器里运行一个SSH服务器".但是,从这篇博文中你将会了解到你根本不需要运行SSHd守护进程来进入你的容器.当然,除非你的容器就是一个SSH服务器. 运行SSH服务器是很想当然的,因为它提供了进入容器的简便方式.在我们公司基本上每个人都最少使用过一次SSH.我们中有很大一部分人每天都会使用它,并且他们很熟悉公钥与私钥,无密码登录,密钥代理,甚至有时会使用端口转发和其他不常用的功能.正因如
-
在宿主机上执行docker容器内部的shell或程序方式
为了避免反复进入docker容器内部操作,可以将一系列容器内部的指令由宿主机来操作完成. 在宿主机(作者主机为windows7)上执行centos容器(name为centos-1)中/usr目录下的"printer"可执行程序,该程序输出为打印"123". C:\Users\Administrator>docker exec -it centos-1 /bin/bash -c "cd usr && ./printer" 12
-
在docker容器中调用和执行宿主机的docker操作
首先这个帖子,献给docker新手.当然如果你是一个老手,文中分割线后的操作方法也是一种思路. 首先说一下,如何在docker中执行宿主机的docker操作,我们管它叫docker in docker. 至于为什么要在docker中操作宿主机的docker,优点不言而喻,你既可以将你的具体需求容器化部署,又不用直接在宿主机上安装(假设我们没有办法在docker中操作宿主机的docker,那么我们只能将这样的软件程序直接安装到宿主机上,这样显然是不利于管理和维护的). 实现这种需求,其实非常简单,
-
如何监控docker容器运行状态 shell 脚本
场景 公司项目部署在docker中,由于未知原因容器偶尔会停止,需要写一个脚本监控 容器运行状态,如果容器停止了,就再启动该容器 shell脚本 #!/bin/bash # 传入容器名称 containerName=$1 currTime=`date +"%Y-%m-%d %H:%M:%S"` # 查看进程是否存在 exist=`docker inspect --format '{{.State.Running}}' ${containerName}` if [ "${exi
-
Redis快速部署为Docker容器的实现方法
目录 入门 数据存储 配置您的服务器 管理Redis安全 使用您的 Redis 安装 概括 Redis是一种内存键值存储,可以保存高性能的抽象数据结构.开源软件通常用于数据库.消息传递和缓存功能. Docker 是将应用程序打包到容器中的领先工具包.它允许您将软件组件隔离到具有自己的文件系统的独立环境中. 在本指南中,我们将使用 Docker 使用Docker Hub 上的官方镜像快速部署 Redis .与裸机安装相比,Docker 实现了更简单的设置过程,并且不会用新包污染您的主机.在继续之前
-
docker容器详细讲解如何精简镜像减小体积
目录 一.减少镜像层数 1.指令合并 2.多阶段构建 3.启用squash特性 二.缩减容量 1. 选择小的基础镜像 2.上下文管理 3.及时清理下载 精简镜像我们可以从两个方面切入: 减少镜像层数 缩减容量 一.减少镜像层数 1.指令合并 Dockerfile 中的每条指令都将创建一个层,不过查看官方文档中最佳实践有这样一句话: In older versions of Docker, it was important that you minimized the number of laye
随机推荐
- javascript 动态添加表格行
- 批处理删除自身的命令小结
- asp.net上传execl文件后,在页面上加载显示(示例代码)
- vb 中的MD5加密在asp.net中的实现
- 浅析常用分词算法的比较与设想
- JSP 导出Excel表格的实例
- 基于PHP异步执行的常用方式详解
- PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
- linux 检测远程端口是否打开方法总结
- JavaBean和Map转换封装类的方法
- PowerShell中使用ArrayList实现数组插入、删除、添加例子
- Oracle的RBO和CBO详细介绍和优化模式设置方法
- Android TextView实现垂直滚动效果的方法
- python每次处理固定个数的字符的方法总结
- javascript获取以及设置光标位置
- 解决VUEX兼容IE上的报错问题
- Laravel 数据库加密及数据库表前缀配置方法
- Linux上创建、列出、删除Docker容器方法总结
- 使用synchronized实现一个Lock代码详解
- 解决python3 pika之连接断开的问题