supervisord进程管理
2016-04-06 14:11
381 查看
Supervisord
Supervisord是一款基于Python的进程管理工具,当主机上存在多个的进程需要管理时,通过supervisor可以简化进程的管理。 再通过supervisor提供的rpc接口,可以实现多机多进程管理。管理进程配置
配置示例:
[program:storm-nimbus] command=/opt/cluster/storm/bin/storm nimbus user= autostart=true autorestart=true startsecs=15 startretries=999 log_stdout=true log_stderr=true logfile=/data/cluster/logs/storm/nimbus.out logfile_maxbytes=20MB logfile_backups=10
多机多进程管理
Github上的supervisord-monitor项目为多机多进程管理提供了 很好的思路。******************************************************************************************
1.安装(以下方式任选一种)
- easy_install supervisor- pip install supervisor- yum install supervisor- apt-get install supervisor- 下载源码包使用: python setup.py install 来安装
2.配置
生成基础配置文件echo_supervisord_conf > /usr/local/supervisor/supervisord.conf
配置supervisor更改include区段[include]
files = /usr/local/supervisor/conf/*.conf # 启动进程配置文件所在位置
如果需要web控制界面[inet_http_server]
port=0.0.0.0:9001
username=username ; 你的用户名
password=password ; 你的密码
启动进程配置说明
; 管理单个进程的配置,可创建多个,下面是所有可能的配置选项;[program:theprogramname];command=/bin/cat ; 启动进程的命令 使用相对路径,可以加参数;process_name=%(program_name)s ; 进程名称 表达式 (默认 %(program_name)s);numprocs=1 ; 进程数目 (def 1);directory=/tmp ; 执行命令所在的目录 (def no cwd);umask=022 ; 进程默认权限 (default None);priority=999 ; 进程启动相对优先权 (default 999);autostart=true ; 跟随supervisor启动时启动 (default: true);autorestart=unexpected ; 计划启动 (default: unexpected);startsecs=1 ; 延时启动 (def. 1);startretries=3 ; 最多连续启动失败 (default 3);exitcodes=0,2 ; 进程结束代码 (default 0,2);stopsignal=QUIT ; signal used to kill process (default TERM);stopwaitsecs=10 ; 最长结束等待时间,否则使用 SIGKILL (default 10);stopasgroup=false ; 是否想UNIX进程组发送结束信号 (default false);killasgroup=false ; SIGKILL UNIX 进程组 (def false);user=chrism ; 设置启动此程序的用户;redirect_stderr=true ; 重定向程序的标准错误到标准输出 (default false);stdout_logfile=/a/path ; 标准输出的日志路径, NONE for none; default AUTO;stdout_logfile_maxbytes=1MB ; 日志文件最大值,否则循环写入 (default 50MB);stdout_logfile_backups=10 ; 标准输出日志备份数目 (default 10);stdout_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0);stdout_events_enabled=false ; emit events on stdout writes (default false);stderr_logfile=/a/path ; 标准错误输出日志路径, NONE for none; default AUTO;stderr_logfile_maxbytes=1MB ; 日志文件最大值,否则循环写入 (default 50MB);stderr_logfile_backups=10 ; 标准错误日志备份数目 (default 10);stderr_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0);stderr_events_enabled=false ; emit events on stderr writes (default false);environment=A="1",B="2" ; 进程附加环境 (def no adds);serverurl=AUTO ; override serverurl computation (childutils)
3.进程管理
Supervisord安装完成后有两个可用的命令行supervisord和supervisorctl,命令使用如下:supervisord: 启动Supervisord, 一般在etc/init.d/下面会有对应的服务命令, 用它启动即可指定配置文件启动:
supervisord -c /usr/local/supervisor/supervisor.conf
supervisorctl 管理终端:直接运行supervisorctl打开supervisor控制终端, 输入help可以查看支持的命令,基本命令如下:
default commands (type help <topic>):=====================================add clear fg open quit remove restart start stop update avail exit maintail pid reload reread shutdown status tail version
或者可以在bash直接执行supervisor控制命令, 基本命令如下:
supervisorctl status: 查看当前运行的进程列表supervisorctl stop xxx: 停止某一个进程(xxx),xxx为[program:theprogramname]里配置的值。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都不会自动重启。
4.其他说明
supervisord要求管理的程序是非daemon程序,supervisord会帮你把它转成daemon程序,因此如果用supervisord来管理nginx的话,必须在nginx的配置文件里添加一行设置daemon off让nginx以非daemon方式启动。同理, 使用supervisor管理redis的启动时, 也必须设置: daemonize no
5.配置范例
[program:test-demo] command=python /data/python/test/test.py autostart=true autorestart=true startsecs=10 user=hello redirect_stderr=true stdout_logfile=/data/log/test.log stdout_logfile_maxbytes=10MB stdout_logfile_backups=10 stopasgroup=true killasgroup=true environment=PYTHONPATH='/data/python/test'
6.问题备注
一个可能的问题:* Starting Supervisor daemon manager......Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.For help, use /usr/bin/supervisord -h......fail!解决:解决办法:unlink supervisor.sock文件的位置
6.参考资料
http://supervisord.org/http://jwch.sdut.edu.cn/book/server/supervisor.html http://blog.jiunile.com/linux%E8%BF%9B%E7%A8%8B%E7%AE%A1%E7%90%86supervisord.html
相关文章推荐
- fastjson处理接口时的一个问题
- Patrol 7 架构下?的处理方法
- 局域网与广域网接口标准
- RJ-45接口信号定义
- DVI 视频接口图文解析
- 如何设置域名接口
- 通过C#实现自动售货机接口
- C#中IEnumerable接口用法实例分析
- C#中实现判断某个类是否实现了某个接口
- C#隐式/显示实现接口方法详解
- C#实现两接口中同名方法实例分析
- 详解C#中的接口属性以及属性访问器的访问限制
- C#中的ICustomFormatter及IFormatProvider接口用法揭秘
- C#接口实现方法实例分析
- 基于C# 中可以new一个接口?的问题分析
- C#抽象类和接口的区别分析
- 详细解读PHP中接口的应用
- php单一接口的实现方法
- C#中类与接口的区别个人总结
- C语言接口与实现方法实例详解