标签:its 不同 isa install 备份 sse 管理 开机 cap
守护进程,帮你管理其他进程,让其他进程成为后台进程
监控进程是否死掉,自动重启;
管理进程的启动,停止;
对进程输出的日志进行管理
每个进程使用不同的用户启动,这样可以使进程获得不同用户的权限
pip install supervisor
echo_supervisord_conf
supervieord -c *.conf
supervisorctl shutdown
supervisorctl
centos6和centos7不一样
http://supervisord.org/configuration.html#supervisord-section-values
添加或者修改配置文件后,需要重新加载
supervisorctl reload
[program:test] ; 这个就是咱们要管理的子进程了,":"后面的是名字,最好别乱写和实际进程有点关联最好。这样的program我们可以设置一个或多个,一个program就是要被管理的一个进程
directory = /var/www/test/ ; 程序的启动目录;进程运行前,会前切换到这个目录
command = python test.py ; 启动命令,可以看出与手动在命令行启动的命令是一样的; 有一点需要注意的是,我们的command只能是那种在终端运行的进程,不能是守护进程。这个想想也知道了,比如说command=service
httpd start。httpd这个进程被linux的service管理了,我们的supervisor再去启动这个命令这已经不是严格意义的子进程了。这个是个必须设置的项
autostart = true ; 在 supervisord 启动的时候也自动启动
startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true ; 程序异常退出后自动重启,有三个选项,false,unexpected和true。如果为false的时候,无论什么情况下,都不会被重新启动,如果为unexpected,只有当进程的退出码不在下面的exitcodes里面定义的退
出码的时候,才会被自动重启
;exitcodes=0,2 ; 注意和上面的的autorestart=unexpected对应。。exitcodes里面的定义的
退出码是expected的。
;stopsignal=QUIT ; 进程停止信号,可以为TERM, HUP, INT, QUIT, KILL, USR1, or USR2等信号
默认为TERM 。。当用设定的信号去干掉进程,退出码会被认为是expected
非必须设置
;stopwaitsecs=10 ; 这个是当我们向子进程发送stopsignal信号后,到系统返回信息
给supervisord,所等待的最大时间。 超过这个时间,supervisord会向该
子进程发送一个强制kill的信号。
默认为10秒。。非必须设置
;stopasgroup=false ; 这个东西主要用于,supervisord管理的子进程,这个子进程本身还有
子进程。那么我们如果仅仅干掉supervisord的子进程的话,子进程的子进程
有可能会变成孤儿进程。所以咱们可以设置可个选项,把整个该子进程的
整个进程组都干掉。 设置为true的话,一般killasgroup也会被设置为true。
需要注意的是,该选项发送的是stop信号
默认为false。。非必须设置。。
;killasgroup=false ; 这个和上面的stopasgroup类似,不过发送的是kill信号
;user=chrism ; 如果supervisord是root启动,我们在这里设置这个非root用户,可以用来
管理该program
默认不设置。。。非必须设置项
startretries = 3 ; 启动失败自动重试次数,默认是 3
user = leon ; 用哪个用户启动
redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /var/log/test/test.log ; 需要手动创建
; 可以通过 environment 来添加需要的环境变量,一种常见的用法是修改 PYTHONPATH
; environment=PYTHONPATH=$PYTHONPATH:/path/to/somewhere ;这个是该子进程的环境变量,和别的子进程是不共享的
;stdout_events_enabled=false ; 当设置为ture的时候,当子进程由stdout向文件描述符中写日志的时候,将
触发supervisord发送PROCESS_LOG_STDOUT类型的event
默认为false。。。非必须设置
;stdout_capture_maxbytes=1MB ; 这个东西是设定capture管道的大小,当值不为0的时候,子进程可以从stdout
发送信息,而supervisor可以根据信息,发送相应的event。
默认为0,为0的时候表达关闭管道。。。非必须项
针对上述的配置,如果还想配置8110,8111,8112,8113端口总不可能每个都写一遍吧,那么这里就会有如下解决办法:
[program:ycloud]
command=sudo python /var/www/myapp/manage.py --port=811(process_num)d
process_name=%(program_name)s-811%(process_num)d ; process_name expr (default %(program_name)s)
numprocs=4 ; number of processes copies to start (def 1)
numprocs_start=1
或者可以这样写:
[program:myapp]
command=python /var/www/res/manage.py --port=%(process_num)s
process_name=%(program_name)s_%(process_num)02d
directory=/var/www/res
numprocs_start=8110
autorestart=true
redirect_stderr=true
stdout_logfile=/var/www/supervisor_log/log.txt
设置web方式访问
[inet_http_server] ; inet (TCP) server disabled by default
port=*:9001 ; (ip_address:port specifier, *:port for all iface)
username=admin ; (default is no username (open server))
password=123 ; (default is no password (open server))
标签:its 不同 isa install 备份 sse 管理 开机 cap
原文地址:https://www.cnblogs.com/shengulong/p/10983013.html