摘要:之前在内使用的队列服务做了一个异步,处理一些内容审核的相关操作。但是每次重启容器之后都需要进入内部启动的队列进程虽然文档内有写使用管理进程,但是并没有那么做。。,最近需求上需要使用,所以决定使用来管理这些进程。所以使用了一个脚本,在执行它。
之前在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.log EXPOSE 80 ENTRYPOINT ["/usr/bin/supervisord","-c", "/etc/supervisor/supervisord.conf"]
注 :ENTRYPOINT 指令需要加-c 的参数,不然会有一个WARNINGsupervisord.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文件内,在dockerfile中add到镜像/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/bash set -x rm -rf /etc/default/locale env >> /etc/default/locale exec "$@"
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/27713.html
摘要:之前在内使用的队列服务做了一个异步,处理一些内容审核的相关操作。但是每次重启容器之后都需要进入内部启动的队列进程虽然文档内有写使用管理进程,但是并没有那么做。。,最近需求上需要使用,所以决定使用来管理这些进程。所以使用了一个脚本,在执行它。 之前在docker内使用lumen的队列服务做了一个异步,处理一些内容审核的相关操作。但是每次重启容器之后都需要进入docker内部启动lumen...
摘要:现在的提供了一种更易于使用和维护的计划任务方式。注意事项建议开启这样会极大的加速类的加载。 lumen 为速度而生的 Laravel 框架 官网的介绍很简洁,而且 lumen 确实也很简单,我在调研了 lumen 相关组件(比如缓存,队列,校验,路由,中间件和最重要的容器)之后认为已经能够满足我目前这个微服务的需求了。 任务目标 showImg(https://segmentfault...
摘要:一配置目录结构一般在生产环境都是负载均衡,定时任务是单独在一个容器执行,故此是注释掉的,需要单独在定时任务容器中打开即可。与配置文件由于配置文件是监听的默认情况下监听端口。使用套接字,这避免了的开销。地址镜像地址续搭建应用部署 一、配置目录结构 showImg(https://segmentfault.com/img/bVbpo9F?w=772&h=922); 1.1 crontabs...
摘要:本文转载自微信公众号账号,作者为海航生态科技技术研究院大数据开发工程师高颜。文章介绍了海航生态科技舆情大数据平台的容器化改造经验,包括初期技术架构应用容器化架构迁移持续发布与部署。 本文转载自微信公众号Docker(账号:dockerone),作者为海航生态科技技术研究院大数据开发工程师高颜。 文章介绍了海航生态科技舆情大数据平台的容器化改造经验,包括初期技术架构、应用容器化、架构迁...
摘要:注意点使用启动,不能在后台运行,需要使用其中为或者并配置管理的进程不能以后台程序运行。原因就是不能以非后台运行。所以管理时,由于不能管理后台进程,所以需要配置,在的顶端配置具体配置如下管理界面效果如下参考 注意点:1、使用docker启动,supervisor不能在后台运行,需要使用/usr/bin/supervisord -n -c/etc/supervisor/supervisor...
阅读 2952·2023-04-25 18:00
阅读 2197·2021-11-23 10:07
阅读 3997·2021-11-22 09:34
阅读 1207·2021-10-08 10:05
阅读 1559·2019-08-30 15:55
阅读 3377·2019-08-30 11:21
阅读 3283·2019-08-29 13:01
阅读 1340·2019-08-26 18:26