supervisord linux进程管理程序
Supervisord 是用 Python 实现的一款非常实用的进程管理工具,supervisord 还要求管理的程序是非 daemon程序,supervisord 会帮你把它转成 daemon 程序,因此如果用 supervisord 来管理 nginx 的话,必须在nginx 的配置文件里添加一行设置 daemon off 让 nginx 以非 daemon 方式启动。
采用Supervisord管理java程序及微服务模块等蛮方便的,也可以查看java程序的日志,感觉还不错,总结一下。
1、安装:
yum install epel-release -y yum install supervisor -y
如果直接执行yum install supervisor找不到库,就先执行下yum install epel-release 试试
2、配置:
安装完成后找到配置文件:
/etc/supervisord.conf
修改配置文件,默认web管理为关闭状态,取消注释开启Web管理,并配置用户名及密码:
监听ip可以指定ip也可配置成所有(默认使用本机ip): *:9001 或 0.0.0.0:9001
3、定义托管程序:
进入目录:/etc/supervisord.d 新建六个ini文件(按照不同模块来算,有几个需要管理的模块就建立几个,我这里有六个微服务所以要建立六个配置文件)
例如:service_cliqr_jar.ini 中的内容如下:这样编写启动脚本和日志输入路径
[program:quark_admin_jar] command=java -Xms16m -Xmx64m -jar quark_admin_jar/quark-admin.jar directory=/opt/bbsapp #执行命令的路径 user=root # 执行命令的用户 autorestart=true # 出错后自动重启 redirect_stderr=true # 错误日志重定向 stdout_logfile=/opt/bbsapp/Log/bbsapp.log # 日志的路径,需要提前手动创建log目录 loglevel=info # 日志的级别
4、启动服务:
systemctl start supervisord
服务启动后,你的程序也就启动了【默认是,也可以改成不启动】。
5、在Web页面上查看:
在外网输入http://<访问ip>:9001即可进行Web端的程序管理,可以对相关服务进行刷新、重启、查看日志等,免去登录到服务器操作。直接在web上进行管理
另附一篇配置文件说明:
//设置HTTP服务器监听的UNIX domain socket [unix_http_server] //指向UNIX domain socket的位置,supervisorctl和supervisord通过这个socket文件进行通信 file=/opt/super/supervisor.sock ; //侦听在TCP上的socket,WebServer和远程的supervisorctl都要用,默认不开启 [inet_http_server] //侦听的IP和端口,侦听所有IP用:9001或*:9001 port=127.0.0.1:9001; //定义supervisord这个服务端进程的一些参数,不设置supervisor无法正常运行 [supervisord] //supervisord进程日志文件,默认在当前目录下的supervisord.log中 logfile=/opt/super/supervisord.log //日志文件的最大值,如果超过阈值则重新创建一个日志文件,0表示不限制 logfile_maxbytes=50MB //日志文件上限,超过则会覆盖旧的日志文件,0表示不限制 logfile_backups=10 //日志等级,默认是INFO级别 loglevel=debug //suerpvisord的pid文件位置,默认为当前文件夹的supervisord.pid pidfile=/opt/super/supervisord.pid //supervisord进程是否为守护进程,true则表示supervisord为前台进程,默认的false则表示进程为后台守护进程 nodaemon=false //最少系统空闲的文件描述符,低于这个值supervisor将不会启动 minfds=1024 //最小可用的进程描述符,低于这个值supervisor也将不会正常启动 minprocs=200 //这个选项是给XML_RPC用的,当然你如果想使用supervisord或者webserver这 //个选项必须要开启的 [rpcinterface:supervisor] //XML_RPC的接口工厂配置 supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface //supervisorctl相关的一些配置文件 [supervisorctl] //supervisorctl本地连接supervisord的时候,本地UNIX socket地址 serverurl=unix:///opt/super/supervisor.sock //这个是supervisorctl远程连接supervisord的时候,用到的TCPsocket路径 ;serverurl=http://127.0.0.1:9001 //新建的子进程管理,进行进程的重启、停止等操作的维护,通过test-server来定位该配置信息并进行操作 [program:test-server] //进程操作执行命令 command=java -Xmx900m -jar data-iPortal-server.jar //进程执行前,会切换到这个目录下执行 directory=/opt/test-server/ //项目启动优先级,数字越大,优先级越高 priority=1 //启动的进程个数 numprocs=1 //自动启动,随着supervisord的启动而启动 autostart=true //自动重启,当启动失败的时候自动重启 autorestart=true //启动失败时重试次数上限 startretries=10 //杀死进程的信号量:kill -9:KILL; kill -2:INT; kill -15:TERM stopsignal=INT //停止进程的重试次数上限 stopwaitsecs=10 //重定向stderr到stdout,stderr的日志合并到stdout中,默认false redirect_stderr=true //子进程的stdout的日志路径,可以指定路径,AUTO,none等三个选项。 //设置为none的话,将没有日志产生。设置为AUTO的话,将随机找一个地方 //生成日志文件,而且当supervisord重新启动的时候,以前的日志文件会被 //清空。当redirect_stderr=true的时候,sterr也会写进这个日志文件 stdout_logfile=/opt/logs/test-server.out.log //子进程的stderr日志路径,可以指定路径,AUTO,none等三个选项 stderr_logfile=/opt/logs/test-server.err.log