哈喽大家好啊,好久不見啊(都快一個月了),要問為什麼沒有更新部落格呢隻應為最近在錄制phalapi的視訊教程時間比較少,作為彌補那麼為大家帶來一點幹貨supervisor,話不多說那麼就開始今天的分享把
附上:
了解python的童鞋應該聽說過supervisor,supervisor是通過python實作的一個程序管理工具,
supervisor是筆者在玩golang的時候了解到的,goalng的web應用api需要運作編譯好的可執行檔案才能把golang的内建web服務跑起來,和php不同的就是php-fpm會幫你解決這個問題,那麼遇到這個問題後我找了很多資料在想我怎麼可以讓我的程序一直在背景啟動并且如果有了問題自己死掉了自動重新開機呢.
從php的角度來說比如swoole你需要持續運作不依賴php-fpm是一個道理
第一個問題:
就是有一個程序需要每時每刻不斷的跑,但是這個程序又有可能由于各種原因有可能中斷。當程序中斷的時候我希望能自動重新啟動它
解決問題:
supervisor設計出來的初衷就是用來解決,面對這類問題隻需要簡單的進行配置然後啟動所有的事情都可以交給supervisor來幫你完成
說道隊列腳本大家并不陌生,應為在很多場景下面都需要使用尤其是延時比較高的操作的時候(比如微信個推,消息推送,發送郵件,發送驗證碼)這些基本都是靠隊列腳本處理來完成的,但是問題來了隊列腳本也需要直接運作,并且在死掉了或者是異常退出了也需要啟動起來,
在之前筆者是這麼做的使用chontab+shell沒過5秒跑一下shell然後shell監控一下腳本有沒有死掉,如果死掉了就再次啟動
第二個問題
就是有一個隊列腳本需要運作
這個和第一個差不多隻是場景不同但是需求是一樣的都是需要運作一個常駐的背景程序
在很多時候我們同樣需要解決計劃任務的問題比如晚上5點鐘的時候統計資料,或者每個小時需要處理使用者資訊,那麼這就需要用時計劃任務和定時任務,在傳統的實作方式上面使用chontab的計劃任務和定時任務的偏多,但是如果當業務複雜了或者是動态的計劃任務帶有邏輯的時候就比較痛苦了
第三個問題
解決計劃任務和定時任務
對于定時任務可以跑一個腳本在腳本内算出來我和這個時間還相差多少然後阻塞一定時間,當達到這個時間後那麼程序結束,supervisor會再次把你啟動起來,但是解決複雜的定時任務或者是多個觸發的可能就需要使用到一些輔助了比如node.js的異步swoole的異步能力
supervisor主要就兩個指令:
supervisord : supervisor的伺服器端部分,啟動supervisor就是運作這個指令
supervisorctl:啟動supervisor的指令行視窗。
安裝(centos):
注意:python版本必須是2.x版本
生成配置檔案(supervisord.conf):
現在比如我需要添加一個需要運作的程序可以修改配置檔案/etc/supervisord.conf在末尾加入如下内容:
啟動:
使用指定配置檔案啟動:supervisord -c /etc/supervisord.conf
使用預設配置檔案啟動:supervisord
啟動之後大家可以使用supervisorctl status來擷取目前運作的那些有程序
常用指令:
控制指令基本都通過supervisorctl執行,輸入help可以看到指令清單。這是一些常用指令:
注意:如果修改了 /etc/supervisord.conf ,需要執行 supervisorctl reload 來重新加載配置檔案
到這裡關于supervisord的介紹就結束了,supervisord解決的常見的一些守護程序的問題,也可以使用到很多場景,那麼在後面筆者會抽時間帶來phalapi的supervisord計劃任務隊列腳本的拓展,多謝大家的支援!
注:筆者能力有限有說的不對的地方希望大家能夠指出,也希望多多交流!