摘要:之前在內使用的隊列服務做了一個異步,處理一些內容審核的相關操作。但是每次重啟容器之后都需要進入內部啟動的隊列進程雖然文檔內有寫使用管理進程,但是并沒有那么做。。,最近需求上需要使用,所以決定使用來管理這些進程。所以使用了一個腳本,在執行它。
之前在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 "$@"
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/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...
閱讀 3021·2023-04-25 18:00
閱讀 2222·2021-11-23 10:07
閱讀 4061·2021-11-22 09:34
閱讀 1250·2021-10-08 10:05
閱讀 1572·2019-08-30 15:55
閱讀 3435·2019-08-30 11:21
閱讀 3339·2019-08-29 13:01
閱讀 1378·2019-08-26 18:26