專案中遇到有些指令碼需要通過後台程序執行,保證不被異常中斷,之前都是通過nohup、&、screen來實現,帶著能否做乙個start/stop/restart/reload的服務啟動的想法找到裡supervisor。
關於supervisor的介紹在網上大致搜尋總結如下:
supervisor是用python開發的一套通用的程序管理程式,能將乙個普通的命令列程序變為後台daemon,並監控程序狀態,異常退出時能自動重啟。它是通過fork/exec的方式把這些被管理的程序當作supervisor的子程序來啟動,這樣只要在supervisor的配置檔案中,把要管理的程序的可執行檔案的路徑寫進去即可。也實現當子程序掛掉的時候,父程序可以準確獲取子程序掛掉的資訊的,可以選擇是否自己啟動和報警。supervisor還提供了乙個功能,可以為supervisord或者每個子程序,設定乙個非root的user,這個user就可以管理它對應的程序。
1,安裝
swoft是在cli模式下工作的,因此我們可以用supervisor來管理程序。1:easy_install 安裝:easy_install supervisor
2:pip 安裝:
pip install supervisor
3:debian / ubuntu可以直接通過apt安裝:
apt-get install supervisor
在這個下面配置乙個檔案,或者多個檔案
內容如下:
[program:swoft]
command=php /data/www/lch/bin/swoft start
autostart=true
autorestart=true
user=root
numprocs=1
redirect_stderr=true
stdout_logfile=/tmp/swoft.log
再比如我要在swoft裡面開啟乙個rabbitmq消費程序,那麼配置如下:
[program:consume]
;程序名稱
process_name=%(program_name)s_%(process_num)02d
; 程式的啟動目錄
directory = /data/www/lch/
; 啟動命令,可以看出與手動在命令列啟動的命令是一樣的
command = php bin/swoft consume:start
; 在 supervisord 啟動的時候也自動啟動
autostart = true
; 啟動 5 秒後沒有異常退出,就當作已經正常啟動了
otartsecs = 5
; 程式異常退出後自動重啟
autorestart = true
; 啟動失敗自動重試次數,預設是 3
startretries = 3
;程序數
numprocs=1
; 用哪個使用者啟動
user = root
; 把 stderr 重定向到 stdout,預設 false
redirect_stderr = true
; stdout 日誌檔案大小,預設 50mb
stdout_logfile_maxbytes = 20mb
; stdout 日誌檔案備份數
stdout_logfile_backups = 20
stdout_logfile = /tmp/consume.log
儲存,重啟supervisor服務(sudo supervisorctl reload)
這個時候可以檢視程序執**況:
使用Supervisor管理程序
supervisor是乙個c s系統,它允許使用者在類unix系統上監控和管理一系列的程序。你可以把乙個程序以daemon的形式用supervisor來管理。使用pip來安裝supervisor root test1 pip install supervisor如果centos系統中沒用安裝pip,...
使用supervisor管理lnmp
supervisor是用python開發的乙個client server服務,是linux unix系統下的乙個程序管理工具,不支援windows系統。它可以很方便的監聽 啟動 停止 重啟乙個或多個程序。用supervisor管理的程序,當乙個程序意外被殺死,supervisort監聽到程序死後,會...
supervisor程序管理簡單使用
好久沒寫部落格了,本人喜歡私下研究和總結技術,但是並不太喜歡發表供給其他人,使用程序管理部署celery分布式爬蟲專案已經使用了很久了,今天記錄下使用過的技術。希望以後能常寫部落格。簡單介紹 supervisor是乙個程序控制系統,python語言開發,目前只支援python2.7.可以監控可控制程...