Supervisor 進程管理工具


簡介: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

# 好了收工!
相關文章
相關標籤/搜索