公司專案使用到了redis佇列, 使用佇列就會遇到佇列被乾掉的情況, 所以需要使用守護程序
當專案上線之後, 需要在子專案根目錄啟動佇列
php think queue:listen
但是這種寫法, 一旦視窗關閉, 佇列就會取消, 所以我就想了乙個取消救國的方法, 讓它在後台執行
nohup php think queue:listen 2 > &1 &
使用nohup 可以是該命令在後台執行,並把所有輸出都被重定向到乙個名為nohup.out的檔案中
但是這樣做還是避免不了 這個程序意外關閉或者因為其他原因死掉
所以最好還是選擇使用守護程序
第一步:在centos上安裝守護程序supersivor
# yuminstall epel-release
# yum
install supervisor -y
//設定成開機自動啟動
# systemctl enable supervisord
第二步:設定守護程序的執行目錄,日誌目錄,配置檔案
守護程序有自己預設的執行目錄,日誌目錄, 但是為了管理方便, 我們可以自己設定這些目錄
cd /var/mkdir
supervisor
cd supervisor/
mkdir
run # 執行目錄
mkdir
log # 日誌目錄
mkdir conf # 配置目錄 也是需要執行的命令的配置目錄
第三步:修改配置檔案
配置檔案在 /etc/supervisord.conf
; 將supervisor.sock 的路徑換成如下); 將supervisord.log 和 supervisord.pid 的路徑換成如下
[supervisord]
logfile=/var/supervisor/log/supervisord.log ; (main log file;default $cwd/supervisord.log)
pidfile=/var/supervisor/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
; 將supervisor.sock 的路徑換成如下
[supervisorctl]
serverurl=unix:///
var/supervisor/run/supervisor.sock ; use a unix:// url for a unix socket
; 將最底部的files路徑換成如下 配置檔案的目錄
[include]
files = /var/supervisor/conf/*
.conf
第四步:配置自己需要執行的命令 在自己建立的配置目錄下 /var/supervisor/conf
這一步需要特別注意
一般網上的提供的配置檔案如下
但是這樣寫會報一些錯誤, 例如目錄找不到啊 不是乙個有效的布林值啊 之類的
cd /var/supervisor/confvim work_queue.conf
# 插入**
[program:queue_worker] ;專案名稱
directory = /var/tp5.1
; 程式的啟動目錄,專案根目錄的上一級
command =php think queue:listen ; 啟動命令
process_name=%(program_name)s_%(process_num)02d
numprocs = 3
; 開啟的程序數量
autostart = true
; 在 supervisord 啟動的時候也自動啟動
startsecs = 5 ; 啟動 5
秒後沒有異常退出,就當作已經正常啟動了
autorestart = true
; 程式異常退出後自動重啟
startretries = 3 ; 啟動失敗自動重試次數,預設是 3
user =root ; 用哪個使用者啟動
redirect_stderr = true ; 把 stderr 重定向到 stdout,預設 false
stdout_logfile_maxbytes =50mb ; stdout 日誌檔案大小,預設 50mb
stdout_logfile_backups = 20
; stdout 日誌檔案備份數
; stdout 日誌檔案,需要手動建立目錄(supervisord 會自動建立日誌檔案)
stdout_logfile = /var/supervisor/log/queue_worker.log
loglevel=info
經過親自驗證,在啟動守護程序時需要將上面的配置的注釋以及 『;』 去掉
# 插入**[program:queue_worker]
directory=/var/tp5.1
command=php think queue:listen
process_name=%(program_name)s_%(process_num)02d
numprocs=3
autostart=true
startsecs=5
autorestart=true
startretries=3
user=root
redirect_stderr=true
stdout_logfile_maxbytes=50mb
stdout_logfile_backups=20
stdout_logfile=/var/supervisor/log/queue_worker.log
loglevel=info
第五步:啟動守護程序
systemctl start supervisordsystemctl stop supervisord
systemctl restart supervisord
第六步:測試
可以開啟日誌檔案 /va/supervisor/log/ 檢視日誌 是否報錯
也可以使用 ps 檢視命令是否執行 ps -aux|grep php
第七步:提示
這個時候只需要在 /var/supervisor/conf/ 下增加乙個配置檔案即可
檔案內容需要修改 專案目錄 日誌檔名稱 等
很多東西只看是看不會的,需要親自操作一遍,才發現有些事情是我們想的複雜了, 更多的是 事情並不像我們想象的那麼簡單
PHP使用守護程序處理佇列
一.概述 專案是棋牌,web架構是典型的lnmp,server產生的牌局通過http協議請求webserver,由php分析並持久化到mysql,中間參雜了很多業務邏輯,整個流程耗時平均接近2s。這種方式存在以下2個問題 1.整個流程是同步的,server會一直等待php響應,一旦server處理不...
python3佇列使用
python3直接import queue 會報錯,要改成import queue from queue import queue maxsize 1 from queue import queue 執行緒佇列通訊使用 這個是普通的佇列模式,類似於普通列表,先進先出模式,get方法會阻塞請求,直到有...
網路程式設計 程序 4 佇列完成程序之間的通訊
前言 之前說過,多個程序之間是不能共享全域性變數的,那麼怎麼解決這個問題呢?通過佇列queue去解決這個問題 1 看 演示,解釋看註解 usr bin env python coding utf 8 author 劉仲 datetime 2018 7 25 16 31 software pychar...