th5 1 佇列使用守護程序

2022-06-18 08:03:11 字數 3500 閱讀 5050

公司專案使用到了redis佇列, 使用佇列就會遇到佇列被乾掉的情況, 所以需要使用守護程序

當專案上線之後, 需要在子專案根目錄啟動佇列

php think queue:listen

但是這種寫法, 一旦視窗關閉, 佇列就會取消, 所以我就想了乙個取消救國的方法, 讓它在後台執行

nohup php think queue:listen 2 > &1 &

使用nohup 可以是該命令在後台執行,並把所有輸出都被重定向到乙個名為nohup.out的檔案中

但是這樣做還是避免不了 這個程序意外關閉或者因為其他原因死掉

所以最好還是選擇使用守護程序

第一步:在centos上安裝守護程序supersivor

# yum

install 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/conf

vim 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 supervisord

systemctl 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...