2010年(52)
分类: Python/Ruby
2010-08-09 17:23:47
用 Supervisor 管理后台守护进程
一些虚拟主机支持跑后台守护程序, 比如 .
在虚拟主机中管理后台守护程序没有 VPS 那么方便, VPS 是可以使用 root 权限的, 但虚拟主机则不能.
要更方便的管理后台进程, 通常需要借助一些辅助工具. 常用的管理工具有 , 以及 . 其中以 最为易用, 功能也很完善.
是一个 Python 程序, 按照 官方文档安装 就可以了.
稍加注意的是, 虚拟主机用户需要安装到他的用户目录:
easy_install supervisor --prefix=$HOME
安装完成后, 确保 $HOME/bin 目录在 $PATH 环境变量中并已经生效.
可以作为后台守护程序运行, 通过 进行 启动/重启/失败自动重启 等控制.
有两个可执行程序 — supervisord 和 supervisorctl:
它们之间的关系就相当于 Apache 的 httpd 和 apachectl.
首先需要创建一个 的工作目录, 如: $HOME/deploy/supervisor/, 用来存放错误日志输出, pid 文件, socket 文件, 配置文件等.
接着是创建 配置文件, 配置文件用来指示 有哪些进程需要管理, 以及管理策略.
我们把配置文件命名为 supervisord.conf (也可以是其它任何文件名, 但 默认自动在当前目录查找该文件, 用 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 =/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:/// /deploy/supervisor/supervisord.sock [program:blog] command = /deploy/zine/bin/python /home/yospaly/deploy/zine/scripts/server -a 127.0.0.1 --no-reloader --no-debugger --threaded -p 6666 -I /deploy/blog/ [program:blog2] command = /deploy/zine/bin/python /home/yospaly/deploy/zine/scripts/server -a 127.0.0.1 --no-reloader --no-debugger --threaded -p 8888 -I /deploy/blog2/
Note
的用户不能随意指定 的端口号, 要使用在 Webfaction 控制面板添加新的 “Custom app (listening on port)” 后获得的一个特定端口号.
在 supervisord.conf 所在的工作目录执行 supervisord 运行后台管理服务器, 如果运行失败请查看工作目录下的错误日志;
supervisord 跑起来后, supervisorctl 就可以方便的手工管理守护程序了:
supervisorctl start all supervisorctl stop blog supervisorctl restart blog2
是一个易用, 又不失强大的工具, 这里只涉及了 最基本的使用, 还有很多更加高级和有用的功能未能覆盖, 可以进一步参考 .