簡介:python
Supervisor 進程管理工具shell
1、安裝vim
shell > yum -y install python-pip shell > pip install supervisor # 這樣就安裝好了,注意:這貨不支持 Python 3、用 yum 安裝也有問題
2、配置bash
shell > echo_supervisord_conf > /etc/supervisord.conf # 生成配置文件到指定位置,報錯的時候卸載原來的包裝這個 meld3==0.6.7 [ pkg_resources.DistributionNotFound: meld3>=0.6.5 ] shell > grep -vP '^;|^$' /etc/supervisord.conf [unix_http_server] file=/var/tmp/supervisor.sock ; .sock 存放位置 [supervisord] logfile=/var/log/supervisord.log ; .log 存放位置 logfile_maxbytes=50MB ; 每一個日誌文件最大 50MB logfile_backups=10 ; 保留10個備份 loglevel=info ; 日誌級別,info,debug,warn,trace pidfile=/var/run/supervisord.pid ; .pid 存放位置 nodaemon=false ; 守護進程方式啓動 minfds=1024 ; 能夠打開的文件描述符 minprocs=200 ; 能夠啓動的進程數 [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] serverurl=unix:///var/tmp/supervisor.sock ; .sock 存放位置 # 稍微修改了一些默認項
3、啓動工具
shell > supervisord -c /etc/supervisord.conf # 指定配置文件路徑 shell > ps aux | grep sup root 40 0.0 0.0 0 0 ? S 15:49 0:00 [sync_supers] root 4044 0.0 0.1 199380 11164 ? Ss 17:33 0:00 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf
4、啓動一個自定義腳本ui
shell > vim hello.sh #!/bin/bash for i in {1..10};do echo hello; sleep 1;done shell > chmod a+x hello.sh
shell > vim /etc/supervisord.conf [program:hello] directory=/root ; 運行程序時切換到指定目錄 command=/bin/bash hello.sh ; 執行程序 ( 程序不能時後臺運行的方式 ) redirect_stderr=true ; 標準錯誤輸出重定向到標準輸出 stdout_logfile=hello.log ; 指定日誌文件路徑,能夠絕對路徑 ( 相對路徑 相對 directory= 指定的目錄 ) stdout_logfile_maxbytes=50MB ; 文件切割大小 stdout_logfile_backups=10 ; 保留的備份數 # 加入程序啓動配置
shell > supervisorctl supervisor> help default commands (type help <topic>): ===================================== add exit open reload restart start tail avail fg pid remove shutdown status update clear maintail quit reread signal stop version # 客戶端工具提供一些指令 ( supervisorctl help 這樣運行也是能夠的 ) supervisor> update hello: added process group # 自動重啓配置文件發生改變的進程 supervisor> start hello hello: started supervisor> status hello RUNNING pid 4125, uptime 0:00:04 # 反正就是這幾個指令,啓動後腳本的輸出會被記錄到 stdout_logfile= 指定的日誌文件中 # 如今的狀況是,程序執行一次就退出了 supervisor> status hello EXITED Dec 01 06:02 PM supervisor> exit
shell > vim /etc/supervisord.conf [program:hello] directory=/root command=/bin/bash hello.sh autostart=true ; 程序隨 supervisord 啓動而啓動 startsecs=10 ; 程序啓動 10 後沒有退出,認爲程序啓動成功 startretries=3 ; 啓動失敗重試次數 autorestart=true ; 程序退出後自動啓動,false 不啓動、unexpected 只有退出狀態碼爲 exitcodes= 指定的值是才自動啓動 redirect_stderr=true stdout_logfile=hello.log stdout_logfile_maxbytes=50MB stdout_logfile_backups=10 # 添加一些配置,從新來過 supervisor> update hello: stopped hello: updated process group # 注意:此次會時間長一點,由於設置了 startsecs=10,也就是說 10 秒後才能 status 看到進程狀態 # 此次程序就會自動重啓了
shell > vim /etc/supervisord.conf [program:hello] directory=/root command=/bin/bash hello.sh process_name=%(program_name)s_%(process_num)02d ; 啓動多個進程時設置不一樣的進程名 numprocs=2 ; 啓動幾個進程 autostart=true startsecs=5 startretries=3 autorestart=true redirect_stderr=true stdout_logfile=hello.log stdout_logfile_maxbytes=50MB stdout_logfile_backups=10 # 又加了啓動多個進程的配置 supervisor> update hello: stopped hello: updated process group supervisor> status hello:hello_00 RUNNING pid 4899, uptime 0:00:09 hello:hello_01 RUNNING pid 4898, uptime 0:00:09 # 此次長這樣了.. supervisor> stop all hello:hello_00: stopped hello:hello_01: stopped supervisor> status hello:hello_00 STOPPED Dec 01 06:27 PM hello:hello_01 STOPPED Dec 01 06:27 PM # 好了收工!