一、supervisor安装
【安装】sudo apt-get install supervisor
【重载】supervisorctl reload
【示例】配置
==================================================
[program:test]
command=python -m SimpleHTTPServer
==================================================
二、常用命令
supervisorctl reload
supervisorctl start test
supervisorctl start _pro_name,启动某个进程
supervisorctl restart _pro_name,重启某个进程
supervisorctl stop groupworker: ,重启所有属于groupworker分组的进程(start,restart同理)
supervisorctl stop all,停止全部进程,注:start、restart、stop都不会载入最新的配置文件。
supervisorctl reload,载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。
supervisorctl update,根据最新配置,启动新配置或有改动的进程,配置没有改动不会受影响重启。
supervisor启动和停止的日志文件存放在/var/log/supervisor/supervisord.log
注意:显式用stop停止掉的进程,用reload或者update都不会自动重启
三、配置config
[program:zhaji_in]
command= /home/admin1/work/middleware/app/ivs_samples/zhaji_in.sh ; 程序启动命令
directory=/home/admin1/work/middleware/app/ivs_samples ; 执行前要不要先cd到目录去,一般不用
numprocs=1 ; 启动几个进程
autostart=true ; 在supervisord启动的时候也自动启动
autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=3 ; 启动失败自动重试次数,默认是3
startsecs=3 ; 启动3秒后没有异常退出,就表示进程正常启动了,默认为1秒
;user=admin1 ; 用哪个用户启动进程,默认是root
;priority=999 ; 进程启动优先级,默认999,值小的优先启动
redirect_stderr=true ; 把stderr重定向到stdout,默认false[*****]
stdout_logfile=/etc/supervisor/log/zhaji_in.log
stderr_logfile=/etc/supervisor/log/zhaji_in_err.log
stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默认50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数,默认是10
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stopasgroup=false ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false ;默认为false,向进程组发送kill信号,包括子进程
exitcodes=0 ; 正常退出代码(是说退出代码是这个时就不再重启了吗?待确定)
stopsignal=KILL ; 用来杀死进程的信号
stopwaitsecs=10 ; 发送SIGKILL前的等待时间
【问题】
supervisor守护进程发现无法启动,报错是找不到JAVA_HOME,即使在flume_env.sh中配置了JAVA_HOME的路径也不行,supervisor在program的配置文件中有个environment配置,在配置文件最下面增加environment=JAVA_HOME="xxxxxx"即可,如果多个环境变量用逗号分隔environment=JAVA_HOME="xxxxxx",aaa="bbb"这种。
supervisor 启动的时候是 /etc/init.d,所以环境变量根本没有加载起来,在启动脚本里加上就可以了。
在 supervisor 配置文件.conf 中 加上 environment=PYTHONPATH=/opt/mypypath:%(ENV_PYTHONPATH)s,PATH=/opt/mypath:%(ENV_PATH)
【参考】 https://stackoverflow.com/questions/12900402/supervisor-and-environment-variables