原文出處:[https://segmentfault.com/a/1190000015768529](https://segmentfault.com/a/1190000015768529)
在使用Tp的消息隊列 think-queue的時候進程意外結束了!導致項目沒法運行;
所以用到了supervisor; 接下來跟大家分享一下自己的使用心得以及安裝到使用的方法;
官網:[http://supervisord.org/introd...](http://supervisord.org/introduction.html)
首先安裝 有很多辦法;
01:wget 下載壓縮包:
~~~
cd /usr/local/lee #這個lee是我自己建立的一個目錄
wget https://pypi.python.org/packages/7b/17/88adf8cb25f80e2bc0d18e094fcd7ab300632ea00b601cbbbb84c2419eae/supervisor-3.3.2.tar.gz
tar -zxvf supervisor-3.3.2.tar.gz
cd supervisor-3.3.2
python setup.py install
~~~
02: yum安裝:
~~~
yum install python-setuptools
easy_install supervisor
~~~
我們安裝的時候使用wget的;



之后生成配置文件:
~~~
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisord.conf
~~~
打開配置文件修改一點東西;
~~~
vim?/etc/supervisord.conf
~~~
要將底部的
~~~
;[include]
;files = relative/directory/*.ini
修改為:
[include]
files=/etc/supervisor/*.conf
(注意去掉分號,第一次安裝的時候就因為沒去掉分號出現了問題!);
~~~
之后創建一個文件 文件名隨意 后綴為.conf的,我這里就創建一個test.conf的文件;
我的項目在/www/wwwroot/admin/目錄下:
~~~
vim test.conf
#寫入一些配置:
[program:test] # 設置進程的名稱,使用 supervisorctl 來管理進程時需要使用該進程名 我這里就叫做test了!
command=php think queue:work --queue saveLoginLog --daemon --tries 10; #這個就是隊列執行的命令
directory= /www/wwwroot/admin; #命令執行的目錄或者說執行 command 之前,先切換到工作目錄 可以理解為在執行命令前會切換到這個目錄
process_name=%(process_num)02d; #默認為 %(program_name)s,即 [program:x] 中的 x 這個是進程名,如果我們下面的numprocs參數為1的話,就不用管這個參數
了,它默認值%(program_name)s也就是上面的那個program冒號后面的
numprocs=5; #進程數量當不為1時的時候,就是進程池的概念,注意process_name的設置
autostart=true; #是否自動啟動
autorestart=true; #程序意外退出是否自動重啟
startsecs=1; 自動重啟間隔
startretries=20; 當進程啟動失敗后,最大嘗試啟動的次數。。當超過3次后,supervisor將把此進程的狀態置為FAIL 默認值為3 。。
redirect_stderr=true; 如果為true,則stderr的日志會被寫入stdout日志文件中 理解為重定向輸出的日志
user=root; 這個參數可以設置一個非root用戶,當我們以root用戶啟動supervisord之后。我這里面設置的這個用戶,也可以對supervisord進行管理
stdout_logfile= /www/wwwroot/admin/test.out.log; 子進程的stdout的日志路徑 輸出日志文件
stderr_logfile=/www/wwwroot/admin/test.err.log ; 錯誤日志文件 當redirect_stderr=true。這個就不用
~~~
上面有注釋說明的看起來有點混亂,我們來寫一個沒有注釋的:
~~~
[program:test]
command=php think queue:work --queue saveLoginLog --daemon --tries 10
directory= /www/wwwroot/admin
process_name=%(process_num)02d
numprocs=5
autostart=true
autorestart=true
startsecs=1
startretries=20
redirect_stderr=true
user=root
stdout_logfile= /www/wwwroot/admin/test.out.log
stderr_logfile=/www/wwwroot/admin/test.err.log
~~~
之后執行啟動:
~~~
supervisord -c /etc/supervisord.conf
supervisorctl reload
~~~

我在執行的時候遇到錯誤了,下面會說錯誤的處理的問題以及解決辦法;
現在我們來測試;
首先在測試的時候執行 stop 將進程停止,之后再打開一個終端連接redis,我們執行登錄,執行后登錄后的隊列任務會在redis一直存在;
~~~
supervisorctl?stop?test?或者直接 supervisorctl?stop?all
~~~

可以看到是沒有被執行的!現在我們開supervisorctl 的test進程


接下來說一下問題:
問題1:
Unlinking stale socket /tmp/supervisor.sock
或者:
Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.


解決辦法:
~~~
sudo unlink /tmp/supervisor.sock
or
sudo unlink /var/run/supervisor.sock
~~~
問題2:
gave up: redis entered FATAL state, too many start retries too quickly
解決辦法:
修改redis.conf的daemonize為no
其他問題暫時沒有發現;
我在測試的時候進程kill掉居然都可以執行,所以將服務器重啟了!
- PHP新特性
- 一些常識
- PHP常見header頭
- Nginx配置文件
- 常用工具類
- PHP實現的一個時間幫助類
- PHP原生生成EXCEL
- PHP地理位置計算
- PHP獲取服務器狀態
- 駝峰轉下劃線
- 百度地圖兩點坐標距離計算
- 判斷是否是url
- 郵件發送類
- 阿拉伯數字轉化為大寫
- 獲取漢字首個拼音
- 根據身份證號獲取星座
- 生成驗證碼類
- 生成唯一ID
- 身份證驗證類
- PHP中文轉拼音
- curl獲取網頁內容
- 快遞查詢api
- 快遞API類
- 上傳圖片類
- 股票類
- 找回密碼類
- 校驗數據規則
- PHP獲取收集相關信息
- 字符串截取助手函數
- 網頁中提取關鍵字
- 檢測瀏覽器語言
- PHP實現微信紅包拆分算法
- 常用函數
- 微信相關
- 網絡知識
- LX1 Laravel / PHP 擴展包視頻教程
- THINKPHP5學習
- 高級查詢
- Vue學習
- Vue全家桶
- Vue-CLI 3.x 自動部署項目至服務器
- Vue2全家桶
- Vue2全家桶之一:vue-cli(vue腳手架)超詳細教程
- Vue2全家桶之二:vue-router(路由)詳細教程,看這個就夠了
- Vue2全家桶之三:vue-resource(不推薦)----axios(推薦)
- 前端相關
- sublime text3 配置less編譯環境
- 服務器搭建相關
- supervisor
- Supervisor 安裝與配置 Linux進程管理
- supervisor 永不掛掉的進程 安裝以及使用
- Supervisor進程管理&開機自啟
- php實現定時任務
- 使用sublime text3 連接sftp/ftp(遠程服務器)
- Redis相關
- linux服務器重啟后導致redis數據丟失
- 搜索引擎SEO
- 百度收錄權威鏈接,指向真正需要收錄的地址rel
- 軟件相關
- sublime
- sublime Text3修改側邊欄的主題
- sublime和vscode比較
- Acrylic DNS Proxy 使用方法
- 技術類網址收藏