supervisor 管理后台进程
supervisor 管理后台进程 文章分类: Python编程
参考这篇文章
加上一些notes:
1 生成默认conf文件: echo_supervisord_conf > ...
2 启动:superviserd -c 配置文件path
eg:supervised -c t.ini
配置文件ini格式
3 控制:supervisorctrl -i
进入交互模式
用 Supervisor 管理后台守护进程
一些虚拟主机支持跑后台守护程序, 比如 Webfaction .
在虚拟主机中管理后台守护程序没有 VPS 那么方便, VPS 是可以使用 root 权限的, 但虚拟主机则不能.
要更方便的管理后台进程, 通常需要借助一些辅助工具. 常用的管理工具有 runit , daemontools 以及 Supervisor . 其中以 Supervisor 最为易用, 功能也很完善.
安装 Supervisor
Supervisor 是一个 Python 程序, 按照 官方文档安装 就可以了.
稍加注意的是, 虚拟主机用户需要安装到他的用户目录:
easy_install supervisor --prefix=$HOME
安装完成后, 确保 $ HOME /bin 目录在 $ PATH 环境变量中并已经生效.
使用方法: 以 Zine 为例
Zine 可以作为后台守护程序运行, 通过 Supervisor 进行 启动/重启/失败自动重启 等控制.
Supervisor 有两个可执行程序 — supervisord 和 supervisorctl :
supervisord 是后台管理服务器, 用来依据配置文件的策略管理后台守护进程; supervisorctl 用于管理员向后台管理程序发送 启动/重启/停止 等指令;它们之间的关系就相当于 Apache 的 httpd 和 apachectl .
创建工作目录和配置文件
首先需要创建一个 Supervisor 的工作目录, 如: $ HOME /deploy/ supervisor / , 用来存放错误日志输出, pid 文件, socket 文件, 配置文件等.
接着是创建 配置文件 , 配置文件用来指示 Supervisor 有哪些进程需要管理, 以及管理策略.
我们把配置文件命名为 supervisord.conf (也可以是其它任何文件名, 但 Supervisor 默认自动在当前目录查找该文件, 用 supervisord.conf 会为以后管理提供方便):
[supervisord] logfile = %(here)s/supervisord.log loglevel = warn pidfile = %(here)s/supervisord.pid directory = %(here)s/ childlogdir = %(here)s/childlog [unix_http_server] file = <YOU-HOME-PATH>/deploy/ supervisor /supervisord.sock [rpcinterface: supervisor ] ; This section is always necessary because supervisor uses RPC internally. supervisor .rpcinterface_factory = supervisor .rpcinterface:make_main_rpcinterface [supervisorctl] ; Must match settings in 'unix_http_server' serverurl = unix:///<YOU-HOME-PATH>/deploy/ supervisor /supervisord.sock [program:blog] command = <YOU-HOME-PATH>/deploy/zine/bin/ python /home/yospaly/deploy/zine/scripts/server -a 127.0.0.1 --no-reloader --no-debugger --threaded -p 6666 -I <YOU-HOME-PATH>/deploy/blog/ [program:blog2] command = <YOU-HOME-PATH>/deploy/zine/bin/ python /home/yospaly/deploy/zine/scripts/server -a 127.0.0.1 --no-reloader --no-debugger --threaded -p 8888 -I <YOU-HOME-PATH>/deploy/blog2/配置文件的第一段用来配置 supervisord 后台管理服务器一些输出文件的路径; 第二段用来打开 supervisord 内部的 Socket 服务, 以便接受和处理来自控制程序 ( supervisorctl ) 请求; 第三段是必备的, 详见注释; 第四段告诉控制程序 ( supervisorctl ) 通过什么途径和 supervisord 通信;
Note
Webfaction 的用户不能随意指定 Zine 的端口号, 要使用在 Webfaction 控制面板添加新的 “Custom app (listening on port)” 后获得的一个特定端口号.
使用 supervisorctl 进行控制
在 supervisord.conf 所在的工作目录执行 supervisord 运行后台管理服务器, 如果运行失败请查看工作目录下的错误日志;
supervisord 跑起来后, supervisorctl 就可以方便的手工管理守护程序了:
supervisorctl start all supervisorctl stop blog supervisorctl restart blog2
结束语
Supervisor 是一个易用, 又不失强大的工具, 这里只涉及了 Supervisor 最基本的使用, 还有很多更加高级和有用的功能未能覆盖, 可以进一步参考 Supervisor 官方文档 .
查看更多关于supervisor 管理后台进程的详细内容...