[喵咪Liunx(1)]計劃任務隊列腳本後臺進程Supervisor幫你搞定 頂 原 薦

#[喵咪Liunx(1)]計劃任務隊列腳本後臺進程Supervisor幫你搞定#

##前言##

哈嘍大家好啊,好久不見啊(都快一個月了),要問爲什麼沒有更新博客呢只應爲最近在錄製PhalApi的視頻教程時間比較少,作爲彌補那麼爲大家帶來一點乾貨Supervisor,話不多說那麼就開始今天的分享把

附上:

喵了個咪的博客:w-blog.cn

Supervisor官網地址:https://pypi.python.org/pypi/supervisor

PhalApi官網地址:http://www.phalapi.net/

開源中國Git地址:http://git.oschina.net/dogstar/PhalApi/tree/release

##1. 我們遇到了什麼問題##

瞭解python的童鞋應該聽說過Supervisor,Supervisor是通過python實現的一個進程管理工具,

###1.1需要一直運行到後臺的可執行文件啓動的服務###

Supervisor是筆者在玩golang的時候瞭解到的,goalng的web應用API需要運行編譯好的可執行文件才能把golang的內建web服務跑起來,和php不同的就是php-fpm會幫你解決這個問題,那麼遇到這個問題後我找了很多資料在想我怎麼可以讓我的進程一直在後臺啓動並且如果有了問題自己死掉了自動重啓呢.

從php的角度來說比如swoole你需要持續運行不依賴php-fpm是一個道理

第一個問題:

就是有一個進程需要每時每刻不斷的跑,但是這個進程又有可能由於各種原因有可能中斷。當進程中斷的時候我希望能自動重新啓動它

解決問題:

Supervisor設計出來的初衷就是用來解決,面對這類問題只需要簡單的進行配置然後啓動所有的事情都可以交給Supervisor來幫你完成

###1.2隊列腳本###

說道隊列腳本大家並不陌生,應爲在很多場景下面都需要使用尤其是延時比較高的操作的時候(比如微信個推,消息推送,發送郵件,發送驗證碼)這些基本都是靠隊列腳本處理來完成的,但是問題來了隊列腳本也需要直接運行,並且在死掉了或者是異常退出了也需要啓動起來,

在之前筆者是這麼做的使用chontab+shell沒過5秒跑一下shell然後shell監控一下腳本有沒有死掉,如果死掉了就再次啓動

第二個問題

就是有一個隊列腳本需要運行

解決問題:

這個和第一個差不多隻是場景不同但是需求是一樣的都是需要運行一個常駐的後臺進程

###1.3計劃任務和定時任務###

在很多時候我們同樣需要解決計劃任務的問題比如晚上5點鐘的時候統計數據,或者每個小時需要處理用戶信息,那麼這就需要用時計劃任務和定時任務,在傳統的實現方式上面使用chontab的計劃任務和定時任務的偏多,但是如果當業務複雜了或者是動態的計劃任務帶有邏輯的時候就比較痛苦了

第三個問題

解決計劃任務和定時任務

解決問題:

對於定時任務可以跑一個腳本在腳本內算出來我和這個時間還相差多少然後阻塞一定時間,當達到這個時間後那麼進程結束,Supervisor會再次把你啓動起來,但是解決複雜的定時任務或者是多個觸發的可能就需要使用到一些輔助了比如node.js的異步swoole的異步能力

這個和第一個差不多隻是場景不同但是需求是一樣的都是需要運行一個常駐的後臺進程

##2. Supervisor安裝和使用##

Supervisor主要就兩個命令:

supervisord : supervisor的服務器端部分,啓動supervisor就是運行這個命令

supervisorctl:啓動supervisor的命令行窗口。

安裝(Centos):

yum install python-setuptools
easy_install supervisor
//如果easy_install不好使就從官方下載:
//然後通過python安裝:
tar zxf supervisor-3.1.3.tar.gz
cd supervisor
python setup.py install

注意:python版本必須是2.x版本

生成配置文件(supervisord.conf):

echo_supervisord_conf > /etc/supervisord.conf

現在比如我需要添加一個需要運行的進程可以修改配置文件/etc/supervisord.conf在末尾加入如下內容:

;你需要啓動的進程給個名字
[program:shadowsocks]
;你需要執行的語句
command=php /app/80/task/index.php xxxx
;是否自動啓動
autostart=true
autorestart=true
;運行程序的用戶
user=root

啓動:

使用指定配置文件啓動:supervisord -c /etc/supervisord.conf

使用默認配置文件啓動:supervisord

啓動之後大家可以使用supervisorctl status來獲取當前運行的那些有進程

常用命令:

控制命令基本都通過supervisorctl執行,輸入help可以看到命令列表。這是一些常用命令:

獲得所有程序狀態 supervisorctl status
關閉目標程序 supervisorctl stop spider
啓動目標程序 supervisorctl start spider
關閉所有程序 supervisorctl shutdown

注意:如果修改了 /etc/supervisord.conf ,需要執行 supervisorctl reload 來重新加載配置文件

##3. 總結##

到這裏關於supervisord的介紹就結束了,supervisord解決的常見的一些守護進程的問題,也可以使用到很多場景,那麼在後面筆者會抽時間帶來phalapi的supervisord計劃任務隊列腳本的拓展,多謝大家的支持!

注:筆者能力有限有說的不對的地方希望大家能夠指出,也希望多多交流!

PhalApi官網QQ交流羣:421032344 歡迎大家的加入!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章