之前在docker内使用lumen的队列服务做了一个异步,处理一些内容审核的相关操作。但是每次重启容器之后都需要进入docker内部启动lumen的队列进程(虽然文档内有写使用supervisord管理进程,但是并没有那么做。。),最近需求上需要使用crontab,所以决定使用supervisord来管理这些进程。

supervisord

dockerfile文件

#安装
RUN apt-get update && apt-get install -y \supervisor\cron \#supervisord
RUN mkdir -p /var/log/supervisor
COPY supervisord.conf /etc/supervisor/supervisord.conf#crontab
#将root文件添加到 /var/spool/cron/crontabs/ 下
ADD cron/root /var/spool/cron/crontabs/root#修改root文件的所属组与权限
RUN chown -R root:crontab /var/spool/cron/crontabs/root \&& chmod 600 /var/spool/cron/crontabs/root#创建log文件
RUN touch /var/log/cron.logEXPOSE 80ENTRYPOINT ["/usr/bin/supervisord","-c", "/etc/supervisor/supervisord.conf"]

ENTRYPOINT 指令需要加-c 的参数,不然会有一个WARNING

supervisord.conf文件

[supervisord]
nodaemon=true
[program:apache2]
command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND"
autostart=true
autorestart=true
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/artisan queue:work --daemon --quiet  --delay=3 --sleep=3 --tries=3
autostart=true
autorestart=true
numprocs=3
redirect_stderr=true
[program:entrypoint]
command=/var/www/html/entrypoint.sh
[program:cron]
command=/etc/init.d/cron start
autostart=true
autorestart=true
redirect_stderr=true

这里有几个需要注意的点:

nodaemon=true supervisord进程将在前台运行
这里需要为true,不然在启动docker的时候会出现 Exited (0),docker退出的情况。因为镜像的前台必须有东西在跑。

process_name=%(program_name)s_%(process_num)02d 进程name
numprocs=3 指让supervisor运行3进程
numprocs为多个的时候process_name为必须值,不然name会冲突报错

这篇文章有关于supervisor配置详解

lumen队列

文档说的很详细,这里不再累赘

这篇文章讲的也很详细

crontab

在上边的dockerfile 文件中已经写了具体安装与配置。

文档里有关于laravel定时任务的具体使用方法

需要注意的是cron安装之后需要supervisord启动,然后需要将定时任务条目写在一个root文件内,在dockerfileadd到镜像/var/spool/cron/crontabs/root目录

* * * * * /usr/local/bin/php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1

注意: 需要写/usr/local/bin/php 不然会出现任务不执行的情况

此cron 将会每分钟调用一次lumen命令调度器,当schedule:run命令执行后,lumen评估你的调度任务并运行到期的任务。

有可能会遇到任务不执行的情况,需要查看/var/log/cron.log日志文件,查看具体原因。如果日志文件内没有内容就需要安装rsyslog,然后修改/etc/rsyslog.conf文件,将cron.* /var/log/cron.log 前的注释去掉。然后/etc/init.d/rsyslog start,再次查看cron.log就可以看到相关日志。

注意:crontab 使用环境变量的问题

由于crontab的执行机制,所以无法直接使用配置的环境变量,但是我们应用的配置都是通过环境变量来配置的,所以需要通过 env 命令将这些环境变量保存到 /etc/default/locale 里,crontab 在启动时会加载这个文件里的环境变量,否则在执行命令的时候会无法获取相关的应用配置,导致执行错误。所以使用了一个shell脚本,在supervisord执行它。

entrypoint.sh文件

#!/bin/bashset -xrm -rf /etc/default/locale
env >> /etc/default/localeexec "$@"

Docker 使用 supervisord 管理 lumen队列与crontab相关推荐

  1. 使用supervisor管理laravel队列 - 配置文件supervisord.conf

    相关文章 上一篇:使用supervisor管理laravel队列 ,此篇重点性描述了我本地配置supervisor的全部过程:但是并未介绍为啥这么配置,这里,我就来记录一下配置supervisor的各 ...

  2. 基于Kubernetes构建Docker集群管理详解

    from: 基于Kubernetes构建Docker集群管理详解 Kubernetes是Google开源的容器集群管理系统,基于Docker构建一个容器的调度服务,提供资源调度.均衡容灾.服务注册.动 ...

  3. tp5 queue.php,tp5(think-queue)消息队列+supervisor进程管理实现队列常驻进程

    前言 传统的程序执行流程一般是 即时|同步|串行的,在某些场景下,会存在并发低,吞吐量低,响应时间长等问题.在大型系统中,一般会引入消息队列的组件,将流程中部分任务抽离出来放入消息队列,并由专门的消费 ...

  4. Docker集群管理(DockerHub Harbor 打包-Jib 任务编排工具- docker-compose和Swarm)

    Docker 集群管理 Docker 集群管理 镜像仓库管理 DockerHUb仓库管理 什么是DockerHUb 账号注册和登陆 Docker客户端登录 管理镜像 推送镜像 仓库镜像测试 regis ...

  5. Docker Swarm Beta 发布,Docker 集群管理

    Docker Swarm 今天发布了 Beta 版本,详细介绍请看这里. Docker Swarm是一个Dockerized化的分布式应用程序的本地集群,它是在Machine所提供的功能的基础上优化主 ...

  6. Docker 的 Web 管理工具 DockerFly

    Dockerfly是基于 Docker1.12+ (Docker API 1.24+) 开发出Docker 管理工具,提供里最基本的基于 Docker 的管理功能,目的是能够方便广大Docker初学者 ...

  7. Docker的容器管理

    Docker的容器管理 一.容器的创建 1.运行一个挂掉的容器 2.开启容器运行某个程序 3.运行一个存活的容器 4.自定义容器名称 二.查看容器的日志 1.实时监控某个容器日志 2.过滤某个容器日志 ...

  8. Kubernetes与docker集群管理常见问题解析

    很荣幸受邀参加开源中国社区的高手问答,我是时速云团队的后端工程师,负责主机管理功能开发.在互动过程中,发现大家在使用/调研kubernetes(简称k8s)过程中遇到了很多问题,这里我总结为几点: l ...

  9. Docker图形化管理工具之Portainer

    What is Portainer? Portainer是一款轻量级的图形化管理工具,通过它我们可以轻松管理不同的docker环境.Portainer部署和使用都非常的简单,它由一个可以运行在任何do ...

最新文章

  1. python装饰器由浅入深_由浅入深,走进Python装饰器-----第五篇:进阶--类装饰类
  2. Android事件的响应,Android 开发事件响应之基于监听的事件响应
  3. Go get 下载的包在哪里?
  4. MySQL数据库SYS CPU高的可能性分析
  5. 2017年我的阅读书单
  6. 《天际友盟DRP数字风险防护报告(2021年上半年)》重磅发布
  7. 腾讯整治扫码点餐强制关注公众号问题
  8. win10 开机启动_win10 -- 取消不需要的开机启动项和服务项加快win10系统开机速度...
  9. css3循环播放属性,详细介绍CSS3中animation-direction属性
  10. GEANT4 中的NIST MATERIAL 材料名录
  11. Broccoli Tree Creator 使用说明 3_3、Girth Transform Node (周长变换节点)
  12. nest中文文档_如何将Nest Cam事件记录到Google文档电子表格
  13. 汽车自适应巡航控制策略【CarSim/Simulink 仿真】
  14. 用计算机程序计算兴利库容,《水利计算》课程教学大纲
  15. 《鲁棒控制——线性矩阵不等式处理方法》(俞立)第二、三、四章学习笔记
  16. 实践篇 | 机器人单目相机测距的实验
  17. 【计量经济学】联立方程模型
  18. 外架小横杆外露长度规范要求_浅谈提高悬挑架质量、安全及视觉效果的管理方法...
  19. 【笔记】Java反射专题
  20. user guide

热门文章

  1. Chrome Full black Screen [Solved]
  2. UE4链接第三方库(lib和dll)
  3. linux在shell中获取时间
  4. cnetos7安装docker V1.0
  5. go gdb调试 参数设置 减小执行文件体积
  6. Redis实战(12)订阅和发布消息
  7. java并发环境安全初始化
  8. 病毒周报(100719至100725)
  9. Windows自带Android模拟器启动失败
  10. Xamarin开发安装Visual Studio 2015 update2报错的解决办法