2019年9月

import argparse

parser = argparse.ArgumentParser(description='命令行说明信息')
parser.add_argument('参数名字1', type=int, help='参数说明文字')
parser.add_argument('参数名字2', type=string, help='参数说明文字')
parser.add_argument('--参数名字3', type=int, default=666, help='参数说明文字')
parser.add_argument('--参数名字4', '-参数名字4', type=int, help='参数说明文字')
args = parser.parse_args()

print(args.参数名字1)
print(args.参数名字2)

说明

-打头的都是可选参数,可选参数才可以设置默认值

supervisor是用Python开发的Linux/Unix系统下的一个进程管理工具。可以很方便的监听、启动、停止、重启一个或多个进程。用supervisor管理的进程,当一个进程意外被杀死,supervisor监听到进程死后,会自动将它重启,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。

1.安装

python3 -m pip install supervisor

安装好后会多处下面几个命令

echo_supervisord_conf //配置表生成工具
supervisord //supervisor 主程序
supervisorctl //supervisor 管理工具

2.配置

mkdir -p /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf // 生成配置文件

多配置文件模式

在 supervisord.conf 配置文件末尾有个 include 段,files 所匹配到的配置文件会被组合进来传递给 supervisord ,这样就可以分离主程序的配置。

[include]
files = /etc/supervisor/conf.d/*.conf

3.启动

supervisord -c /etc/supervisor/supervisord.conf

4.管理

在 supervisor 管理模式下可以控制进程的启动,重启,停止等操作。支持命令行和web两种方式,使用默认配置文件执行命令 supervisorctl 就可以进入管理模式。要进入web管理模式需要修改配置文件 supervisord.conf 去掉 inet_http_server 段的注释,重启 supervisor 即可。

;[inet_http_server]         ; inet (TCP) server disabled by default
;port=127.0.0.1:9001        ; ip_address:port specifier, *:port for all iface
;username=user              ; default is no username (open server)
;password=123               ; default is no password (open server)

QQ20190917-102530.png

supervisorctl 命令行控制

supervisorctl status  查看所有spawn进程的状态
supervisorctl stop xxx,停止某一个进程(xxx),xxx为[program:xxx]里配置的值
supervisorctl start xxx,启动某个进程
supervisorctl restart xxx,重启某个进程
supervisorctl stop groupworker: ,重启所有属于名为groupworker这个分组的进程(start,restart同理)
supervisorctl stop all,停止全部进程,注:start、restart、stop都不会载入最新的配置文件。
supervisorctl reload,载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。
supervisorctl update,根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启
注意:显示用stop停止掉的进程,用reload或者update都不会自动重启。

5.添加要管理的进程

在 supervisord.conf 末尾新增 或者 [include] 段指定的配置文件中新增都是可以的。

[program:<随便起的名字>]
command=/bin/cat // 命令行
;directory=/tmp // 进程启动的当前目录
autostart=true // supervisord 启动的时候也一起启动
startsecs=5 // 进程必须撑住 5秒不退出才算启动成功
autorestart=true // 程序异常启动后自动重启
startretries=3 // 启动失败后重试的次数

6.例子

[program:frp]
command=frps -c /etc/frp/frps.ini
directory=/etc/frp/
autostart=true
autorestart=true

[program:frps] ; 最简配法,都使用默认值即可
command=frps -c /etc/frp/frps.ini
; autostart=true 默认 true
; autorestart=true 默认 true

参考链接:
https://blog.51cto.com/lixcto/1539136
https://blog.51cto.com/lixcto/1540169

data = blob <data length>\x00<data>
hash = sha1(data)
data = zlib(data)

write(hash[:2] + "/" hash[2:], data)

blob
tree
commit 都类似