Supervisor是一个进程控制系统. 它是一个C/S系统(注意: 其提供WEB接口给用户查询和控制), 它容许用户去监控和控制在类UNIX系统的进程. 它的目标与launchd, daemontools和runit有些类似, 可是与它们不同的是, 它不是做为init(进程号pid是1)运行. 它是被用来控制进程, 而且它在启动的时候和通常程序并没有二致. python
那么通俗点,它的做用是什么?你的Nginx,Tomcat,memcache,Redis...会崩么,不会?好吧,那你本身写的服务器监测脚本呢?好吧,不要再纠结了,交给Supervisor吧,它会帮你维护这些,即便它们不当心崩了,Supervisor会帮你看住它们,维护它们。算法
$apt-get install python-setuptools $easy_install supervisor $echo_supervisord_conf > /etc/supervisord.conf
$nano /etc/supervisord.conf
[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
简化模板浏览器
[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
;*为必须填写项 ;*[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
可使用浏览器查看和控制进程状态服务器
[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))
$supervisord -c /etc/supervisord.conf
$supervisorctl shutdown
$supervisorctl reload
经常使用信号说明-原文url
信号名称 | 数字表示 | 说明 |
---|---|---|
SIGHUP | 1 | 终端挂起或控制进程终止。当用户退出Shell时,由该进程启动的全部进程都会收到这个信号,默认动做为终止进程。 |
SIGINT | 2 | 键盘中断。当用户按下组合键时,用户终端向正在运行中的由该终端启动的程序发出此信号。默认动做为终止进程。 |
SIGQUIT | 3 | 键盘退出键被按下。当用户按下或组合键时,用户终端向正在运行中的由该终端启动的程序发出此信号。默认动做为退出程序。 |
SIGFPE | 8 | 发生致命的运算错误时发出。不只包括浮点运算错误,还包括溢出及除数为0等全部的算法错误。默认动做为终止进程并产生core文件。 |
SIGKILL | 9 | 无条件终止进程。进程接收到该信号会当即终止,不进行清理和暂存工做。该信号不能被忽略、处理和阻塞,它向系统管理员提供了能够杀死任何进程的方法。 |
SIGALRM | 14 | 定时器超时,默认动做为终止进程。 |
SIGTERM | 15 | 程序结束信号,能够由 kill 命令产生。与SIGKILL不一样的是,SIGTERM 信号能够被阻塞和终止,以便程序在退出前能够保存工做或清理临时文件等。 |
$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX