SUPERVISOR进程管理器配置指南python
1.1. 官网算法
1.2. 介绍服务器
Supervisor是一个进程控制系统. 它是一个C/S系统(注意: 其提供WEB接口给用户查询和控制), 它容许用户去监控和控制在类UNIX系统的进程. 它的目标与launchd, daemontools和runit有些类似, 可是与它们不同的是, 它不是做为init(进程号pid是1)运行. 它是被用来控制进程, 而且它在启动的时候和通常程序并没有二致.url
那么通俗点,它的做用是什么?你的Nginx,Tomcat,memcache,Redis...会崩么,不会?好吧,那你本身写的服务器监测脚本呢?好吧,不要再纠结了,交给Supervisor吧,它会帮你维护这些,即便它们不当心崩了,Supervisor会帮你看住它们,维护它们。pwa
2.1. 安装rest
$apt-get install python-setuptools $easy_install supervisor $echo_supervisord_conf > /etc/supervisord.conf 2.2. 配置日志
$nano /etc/supervisord.conf 2.3. (program)配置模板code
[program:cat] command=/bin/cat process_name=%(program_name)s numprocs=1 directory=/tmp umask=022 priority=999 autostart=true autorestart=true startsecs=10 startretries=3 exitcodes=0,2 stopsignal=TERM stopwaitsecs=10 user=chrism redirect_stderr=false stdout_logfile=/a/path stdout_logfile_maxbytes=1MB stdout_logfile_backups=10 stdout_capture_maxbytes=1MB stderr_logfile=/a/path stderr_logfile_maxbytes=1MB stderr_logfile_backups=10 stderr_capture_maxbytes=1MB environment=A="1",B="2" serverurl=AUTO 简化模板server
[program:test] command=python test.py directory=/home/supervisor_test/ autorestart=true stopsignal=INT user=root stdout_logfile=test_out.log stdout_logfile_maxbytes=1MB stdout_logfile_backups=10 stdout_capture_maxbytes=1MB stderr_logfile=test_err.log stderr_logfile_maxbytes=1MB stderr_logfile_backups=10 stderr_capture_maxbytes=1MB 2.4. (program)配置说明
;为必须填写项 ;[program:应用名称] [program:cat]
;*命令路径,若是使用python启动的程序应该为 python /home/test.py, ;不建议放入/home/user/, 对于非user用户通常状况下是不能访问 command=/bin/cat
;当numprocs为1时,process_name=%(program_name)s ;当numprocs>=2时,%(program_name)s_%(process_num)02d process_name=%(program_name)s
;进程数量 numprocs=1
;执行目录,如有/home/supervisor_test/test1.py ;将directory设置成/home/supervisor_test ;则command只需设置成python test1.py ;不然command必须设置成绝对执行目录 directory=/tmp
;掩码:--- -w- -w-, 转换后rwx r-x w-x umask=022
;优先级,值越高,最后启动,最早被关闭,默认值999 priority=999
;若是是true,当supervisor启动时,程序将会自动启动 autostart=true
;*自动重启 autorestart=true
;启动延时执行,默认1秒 startsecs=10
;启动尝试次数,默认3次 startretries=3
;当退出码是0,2时,执行重启,默认值0,2 exitcodes=0,2
;中止信号,默认TERM ;中断:INT(相似于Ctrl+C)(kill -INT pid),退出后会将写文件或日志(推荐) ;终止:TERM(kill -TERM pid) ;挂起:HUP(kill -HUP pid),注意与Ctrl+Z/kill -stop pid不一样 ;从容中止:QUIT(kill -QUIT pid) ;KILL, USR1, USR2其余见命令(kill -l),说明1 stopsignal=TERM
stopwaitsecs=10
;*以root用户执行 user=root
;重定向 redirect_stderr=false
stdout_logfile=/a/path stdout_logfile_maxbytes=1MB stdout_logfile_backups=10 stdout_capture_maxbytes=1MB stderr_logfile=/a/path stderr_logfile_maxbytes=1MB stderr_logfile_backups=10 stderr_capture_maxbytes=1MB
;环境变量设置 environment=A="1",B="2"
serverurl=AUTO 2.5. (inet_http_server)配置说明
可使用浏览器查看和控制进程状态
[inet_http_server] ; inet (TCP) server disabled by default port=0.0.0.0: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)) 3. 启动与关闭
3.1. 启动supervisord
$supervisord -c /etc/supervisord.conf 3.2. 关闭supervisord
$supervisorctl shutdown 3.3. 从新载入配置
$supervisorctl reload 说明1:
经常使用信号说明-原文
信号名称 数字表示 说明 SIGHUP 1 终端挂起或控制进程终止。当用户退出Shell时,由该进程启动的全部进程都会收到这个信号,默认动做为终止进程。 SIGINT 2 键盘中断。当用户按下组合键时,用户终端向正在运行中的由该终端启动的程序发出此信号。默认动做为终止进程。 SIGQUIT 3 键盘退出键被按下。当用户按下或组合键时,用户终端向正在运行中的由该终端启动的程序发出此信号。默认动做为退出程序。 SIGFPE 8 发生致命的运算错误时发出。不只包括浮点运算错误,还包括溢出及除数为0等全部的算法错误。默认动做为终止进程并产生core文件。 SIGKILL 9 无条件终止进程。进程接收到该信号会当即终止,不进行清理和暂存工做。该信号不能被忽略、处理和阻塞,它向系统管理员提供了能够杀死任何进程的方法。 SIGALRM 14 定时器超时,默认动做为终止进程。 SIGTERM 15 程序结束信号,能够由 kill 命令产生。与SIGKILL不一样的是,SIGTERM 信号能够被阻塞和终止,以便程序在退出前能够保存工做或清理临时文件等。 $ kill -l