Python進(jìn)程管理神器Supervisor詳解
一、簡(jiǎn)介
Supervisor 是一款 Python 開(kāi)發(fā)的進(jìn)程管理系統(tǒng),允許用戶監(jiān)視和控制 Linux 上的進(jìn)程,能將一個(gè)普通命令行進(jìn)程變?yōu)楹笈_(tái)守護(hù)進(jìn)程,異常退出時(shí)能自動(dòng)重啟
詳細(xì)介紹查閱:Supervisor Introduction
二、安裝
Supervisor 支持 Linux 和 Mac,不支持 Windows
本文系統(tǒng)為: centos,supervisor==4.2.4
pip3 install supervisor
安裝完成后,在Python bin目錄
下面會(huì)有這樣幾個(gè)文件。
ls /usr/local/Python38/bin echo_supervisord_conf supervisorctl supervisord
注:由于python bin目錄是加入了環(huán)境變量,所以可以直接執(zhí)行這幾個(gè)文件。
三、創(chuàng)建配置文件
1.首先建個(gè)目錄,存放配置文件:mkdir supervisord
。
echo_supervisord_conf > supervisord/supervisord.conf
若報(bào)錯(cuò) -bash: /etc/supervisord.conf: Permission denied,需要切換到 root用戶。
2.創(chuàng)建子進(jìn)程配置文件路徑
mkdir -p supervisor/conf.d
后面我們的任務(wù),我們想把它作為守護(hù)進(jìn)程,都需要一個(gè)配置文件,我們把這些配置文件放在conf.d目錄下面。
3.修改配置文件
vim supervisord/supervisord.conf
將最后一部分改為
[include] # 因?yàn)槲疫@里是放在root用戶目錄下,也可以放其它目錄 files=/root/supervisord/conf.d/*.conf
四、初試
1.啟動(dòng) supervisord
supervisord -c supervisord/supervisord.conf
這樣就把supervisord
啟動(dòng)了,我們接下來(lái)可以把我們的任務(wù)交給他去守護(hù)了,停止了會(huì)幫我們自動(dòng)重啟。
查看版本
supervisord -v
2.編寫(xiě)簡(jiǎn)單的 Shell 腳本
vim supervisord/test.sh
內(nèi)容如下
#!/bin/bash while : do echo `date '+%Y-%m-%d %H:%m:%S'` sleep 1 done
簡(jiǎn)單運(yùn)行,Ctrl + C
退出
3.創(chuàng)建子進(jìn)程配置文件
vim supervisor/conf.d/test.conf
test.conf
內(nèi)容如下:
[program:test] command=sh /root/supervisord/test.sh priority=999 ; 相對(duì)啟動(dòng)優(yōu)先級(jí),數(shù)值越小越優(yōu)先,默認(rèn)為999 autostart=true ; 在supervisor啟動(dòng)時(shí)自動(dòng)啟動(dòng),默認(rèn)為true autorestart=true ; 在意外退出時(shí)重新啟動(dòng),默認(rèn)為true startsecs=10 ; 子進(jìn)程啟動(dòng)多少秒后狀態(tài)為running則認(rèn)為啟動(dòng)成功,默認(rèn)為1 startretries=3 ; 嘗試啟動(dòng)的最大次數(shù),默認(rèn)為3 exitcodes=0,2 ; 進(jìn)程的預(yù)期退出代碼列表,默認(rèn)為0 stopsignal=QUIT ; 終止進(jìn)程的信號(hào),默認(rèn)為T(mén)ERM stopwaitsecs=10 ; 在SIGKILL之前等待的最大秒數(shù),默認(rèn)為10 user=root ; 在某用戶下設(shè)置uid來(lái)啟動(dòng)程序,默認(rèn)不切換用戶 redirect_stderr=true ; 是否重定向stdout和stderr,默認(rèn)為false stdout_logfile=/tmp/supervisor.stdout.log ; stdout的輸出文件,默認(rèn)為AUTO stdout_logfile_maxbytes=50MB ; stdout最大文件大小,默認(rèn)為50MB stdout_logfile_backups=10 ; stdout文件備份數(shù),設(shè)為0則不備份,默認(rèn)為10
其實(shí)只需要配置3個(gè)參數(shù),其它不用管:
command=sh /root/supervisord/test.sh
: 我們的子進(jìn)程啟動(dòng)命令;stdout_logfile=/tmp/supervisor.stdout.log
: 日志;program:test
:進(jìn)程名為test
,如果進(jìn)程哪一天想停止啟動(dòng)等,需要進(jìn)程名;
目前文件目錄結(jié)構(gòu)是這樣的:
yum install tree tree supervisord supervisord ├── conf.d │ └── test.conf ├── supervisord.conf └── test.sh
4.重新讀取配置并更新子進(jìn)程
因?yàn)槲覀兊?code>supervisord已經(jīng)啟動(dòng)了,可以通過(guò)ps -ef | grep supervisord.conf
查看。添加了子進(jìn)程配置文件,需要把它重新加載進(jìn)來(lái):
先進(jìn)入supervisord
目錄: cd supervisord
,否則執(zhí)行下面命令會(huì)有問(wèn)題。
supervisorctl reread
再次查看進(jìn)程狀態(tài)
supervisorctl status
結(jié)果:
test RUNNING pid 30278, uptime 1:29:41
名為test
的這個(gè)進(jìn)程已經(jīng)作為守護(hù)進(jìn)程在后臺(tái)運(yùn)行,我們來(lái)kill掉他:
kill 30278
再執(zhí)行supervisorctl status
,會(huì)發(fā)現(xiàn)狀態(tài)立馬由starting
,不一會(huì)變成running
,那么supervisord
的作用已經(jīng)很明顯了,可以自動(dòng)幫我們自動(dòng)監(jiān)控任務(wù)。
注:對(duì)于子進(jìn)程的添加、刪除、啟動(dòng)、停止相關(guān)命令,見(jiàn)附錄。
五、Web 界面
web界面沒(méi)多大用處,就是如果想啟動(dòng)、暫停進(jìn)程是,不需要敲命令而已。
vim supervisord.conf
取消注釋
[inet_http_server] port=*:9001 ; 此處改為*便于調(diào)試
重啟 supervisord
supervisorctl reload
瀏覽器訪問(wèn):linux_ip:9001.
附錄:supervisorctl 常用命令
新增某配置文件,重新加載
supervisorctl reread
改動(dòng)某配置文件,重新加載
supervisorctl update
重啟 supervisord
supervisorctl reload
查看所有進(jìn)程狀態(tài)
supervisorctl status
查看指定進(jìn)程狀態(tài)
supervisorctl status <name>
啟動(dòng)所有子進(jìn)程
supervisorctl start all
啟動(dòng)指定子進(jìn)程
supervisorctl start <name>
重啟所有子進(jìn)程
supervisorctl restart all
重啟指定子進(jìn)程
supervisorctl restart <name>
停止所有子進(jìn)程
supervisorctl stop all
停止指定子進(jìn)程
supervisorctl stop <name>
添加子進(jìn)程到進(jìn)程組
supervisorctl add <name>
從進(jìn)程組移除子進(jìn)程,需要先stop。注意:移除后,需要使用reread和update才能重新運(yùn)行該進(jìn)程
supervisorctl reomve <name>
歡迎訪問(wèn)我的個(gè)人博客,聽(tīng)聽(tīng)我的故事。
到此這篇關(guān)于Python進(jìn)程管理神器Supervisor的文章就介紹到這了,更多相關(guān)Python Supervisor進(jìn)程管理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何利用python在剪貼板上讀取/寫(xiě)入數(shù)據(jù)
說(shuō)起處理數(shù)據(jù)就離不開(kāi)導(dǎo)入導(dǎo)出,而我們使用Pandas時(shí)候最常用的就是read_excel、read_csv了,下面這篇文章主要給大家介紹了關(guān)于如何利用python在剪貼板上讀取/寫(xiě)入數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2022-07-07Python中多線程的創(chuàng)建及基本調(diào)用方法
由于注明的GIL的存在,Python盡管能創(chuàng)建多個(gè)線程,但是多線程卻不能同時(shí)工作...well,這里我們來(lái)看一下Python中多線程的創(chuàng)建及基本調(diào)用方法2016-07-07Python實(shí)戰(zhàn)之手寫(xiě)一個(gè)搜索引擎
這篇文章主要介紹了Python實(shí)戰(zhàn)之手寫(xiě)一個(gè)搜索引擎,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04python tkinter庫(kù)實(shí)現(xiàn)氣泡屏保和鎖屏
這篇文章主要為大家詳細(xì)介紹了python tkinter庫(kù)實(shí)現(xiàn)氣泡屏保和鎖屏,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07Python使用Rich實(shí)現(xiàn)美化終端顯示效果
Rich庫(kù)的功能就像它的名字一樣,使Python編程更加豐富(rich),用來(lái)幫助開(kāi)發(fā)者在控制臺(tái)(命令行)輸出中創(chuàng)建豐富、多彩和具有格式化的文本,下面我們就來(lái)了解下它的具體使用吧2024-02-02Python實(shí)現(xiàn)打印金字塔圖案的方法詳解
使用簡(jiǎn)單的?for?循環(huán)在?python?中打印模式。第一個(gè)外循環(huán)用于處理行數(shù),?而內(nèi)嵌套循環(huán)用于處理列數(shù)。操作打印語(yǔ)句,可以打印不同的數(shù)字圖案、字母圖案或星形圖案。本文將利用這些方法實(shí)現(xiàn)打印金字塔圖案,需要的可以參考一下2022-09-09python 實(shí)現(xiàn)語(yǔ)音聊天機(jī)器人的示例代碼
這篇文章主要介紹了python 實(shí)現(xiàn)語(yǔ)音聊天機(jī)器人的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12Tensorflow訓(xùn)練模型越來(lái)越慢的2種解決方案
今天小編就為大家分享一篇Tensorflow訓(xùn)練模型越來(lái)越慢的2種解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02解決Jupyter notebook更換主題工具欄被隱藏及添加目錄生成插件問(wèn)題
這篇文章主要介紹了解決Jupyter notebook更換主題工具欄被隱藏及添加目錄生成插件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04