Supervisor在CentOS7中默认自带,无需单独安装,使用方便,可以管理本机服务,远程服务,可配置显示页面,可以切割日志
使用前先修改配置文件/etc/supervisord.conf,打开注释及修改拉起服务配置目录及文件
1 2 3 | # vim /etc/supervisord.conf [include] files = /etc/supervisord .d/*.conf |
创建服务的配置,如backend服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # cat /etc/supervisord.d/lanxin_app.conf [program:backend] command = /opt/xxx/init .d /backend start # 程序启动方式,最好使用绝对路径 directory = /opt/xxx/init .d # 程序脚本运行目录 autostart = false # 是否跟随supervisor启动而启动 user = blueset # 启动用户 priority = 1 # 启动优先级,越小优先级越高 startsecs = 1 # 启动时长,启动多长时间此进程依然存在则认为启动正常 autorestart = unexpected # 配合exitcodes使用,当程序的退出状态不包含在exitcodes定义的列表中时,自动拉起该服务 exitcodes = 0 stopsignal = QUIT # QUIT 终止信号,还可以使用kill等其他linux标准信号 stopasgroup = true # 是否停止进程组 killasgroup = true # 同上 redirect_stderr = true stdout_logfile = /var/log/supervisor/backend_stdout .log # 定义程序输出日志位置(可以通过下面参数定期切割该日志) logfile_maxbytes = 50MB # 按大小切割日志 logfile_backups = 10 # 日志保存的份数 |
启动supervisor进程,最好计入到开机自启动中(可在修改完/etc/supervisord.conf后直接启动)
1 2 | # supervisord -c /etc/supervisord.conf # echo 'supervisord -c /etc/supervisord.conf' >> /etc/rc.local |
启动supervisor管理的进程,如backend
1 2 | # supervisorctl start backend # 此处进程名为上方lanxin_app.conf 配置文件中[program:] 代码块后定义的进程名 # supervisorctl status # 此命令可以查看所有管理的进程状态 |
大功告成,正常情况下你的服务已经被管理起来了
下面是supervisorctl命令管理工具的一些使用方法
1 2 3 4 5 6 7 8 9 | supervisorctl status # 查看所有的进程状态 supervisorctl update # 更新新的配置到supervisord(不会重启原来已运行的程序) supervisorctl reload # 载入所有配置文件,并按新的配置启动、管理所有进程(会重启原来已运行的程序) supervisorctl start xxx # 启动某个进程 supervisorctl restart xxx # 重启某个进程 supervisorctl stop xxx # 停止某一个进程(xxx),xxx为[program:theprogramname]里配置的值 supervisorctl stop groupworker # 重启所有属于名为groupworker这个分组的进程(start,restart同理) supervisorctl stop all # 停止全部进程,注:start、restart、stop都不会载入最新的配置文 supervisorctl reread # 当一个服务由自动启动修改为手动启动时执行一下就ok |
注意点:
- supervisor在管理进程的时候需要将服务的daemon模式关闭(如redis,nginx,haproxy等等,都可以加配置项,放到前台运行)
- 不能再使用服务原本的启动方式,如果被管理了,就要一直使用此supervisor自带的命令来对服务进行启停等操作
- 蓝信自己的服务需要修改启动脚本
- 在启动命令前面需要调用exec,因为supervisor在管理进程的时候,始终监视第一个主进程,所以此处最好不能fock新的子进程出来,虽然上面配置中可以通过进程组的方式来管理,但是也不建议这么做
- 不能加nohup和&来启动服务,输出也不要重定向到指定文件,让其输出到终端,由supervisor来管理日志,此时就可以根据相关策略进行日志的切割操作
- yum等安装的服务,不能使用systemctl start 方式来启动服务,还是上面说的command配置项后面需要使用程序完整路径来执行