Supervisor(Linux/Unix进程管理工具)安装与配置
参考链接:https://blog.csdn.net/xyang81/article/details/51555473
Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。
因为Supervisor是Python开发的,安装前先检查一下系统否安装了Python2.4以上版本。下面以CentOS7.4,Python2.7版本环境下,介绍Supervisor的安装与配置步聚
1,环境检查
2,安装supervisor
1 2 3 | yum install python - setuptools easy_install pip pip install superviso |
3,配置
创建配置文件夹
1 | mkdir / etc / supervisor |
运行echo_supervisord_conf程序生成supervisor的初始化配置文件
1 | echo_supervisord_conf > / etc / supervisor / supervisord.conf |
修改该配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | [unix_http_server] file = / tmp / supervisor.sock ; the path to the socket file [inet_http_server] ; 开启web管理界面 port = * : 9001 ; 默认端口 9001 * 不限制登录的客户端 username = user ; 用户名 password = 123 ; 密码 [supervisord] logfile = / var / log / supervisord.log ;日志 logfile_maxbytes = 50MB ; 最大日志大小 50M logfile_backups = 10 ; # of main logfile backups; 0 means none, default 10 loglevel = info ; 日志等级 pidfile = / tmp / supervisord.pid ; supervisord pidfile; default supervisord.pid nodaemon = false ; start in foreground if true; default false minfds = 1024 ; min . avail startup file descriptors; default 1024 minprocs = 200 ; min . avail process descriptors;default 200 [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] serverurl = unix: / / / tmp / supervisor.sock ; use a unix: / / URL for a unix socket [include] files = / etc / supervisor / config.d / * .ini #进程管理配置文件单独放置在一个目录以ini结尾 |
4,启动
1 | supervisord - c / etc / supervisor / supervisord.conf |
web页面登录(配置用户名user密码123)
5,配置管理进程
/etc/supervisor/config.d/tomcat.ini
1 2 3 4 5 6 7 8 9 10 | program:tomcat] environment = JAVA_HOME = "/opt/jdk1.7.0_45" command = / opt / apache - tomcat - 7.0 . 56 / bin / catalina.sh run stdout_logfile = / opt / apache - tomcat - 7.0 . 56 / logs / catalina.out autostart = true autorestart = true startsecs = 5 priority = 1 stopasgroup = true killasgroup = true |
PS:environment设置java环境家目录,如果是yum安装的jdk不需要设置,如果不设置不能通过supervisor启动tomcat会报spawn error错误
重启
1 | supervisorctl reload |
supervisord启动成功后,可以通过supervisorctl客户端控制进程,启动、停止、重启。运行supervisorctl命令,不加参数,会进入supervisor客户端的交互终端,并会列出当前所管理的所有进程。
输入help可以查看可以执行的命令列表,如果想看某个命令的作用,运行help 命令名称,如:help stop
通过web界面管理
6,开机启动supervisor
进入/lib/systemd/system目录,并创建supervisor.service文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [Unit] Description = supervisor After = network.target [Service] Type = forking ExecStart = / usr / bin / supervisord - c / etc / supervisor / supervisord.conf ExecStop = / usr / bin / supervisorctl $OPTIONS shutdown ExecReload = / usr / bin / supervisorctl $OPTIONS reload KillMode = process Restart = on - failure RestartSec = 42s [Install] WantedBy = multi - user.target |
设置开机启动
1 2 | systemctl enable supervisor.service systemctl daemon - reload |
修改权限为766
1 | chmod 766 supervisor.service |
设置service服务类型
编辑服务 /etc/rc.d/init.d/supervisor
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #!/bin/bash # # supervisord This scripts turns supervisord on # # Author: Mike McGrath <mmcgrath@redhat.com> (based off yumupdatesd) # # chkconfig: - 95 04 # # description: supervisor is a process control utility. It has a web based # xmlrpc interface as well as a few other nifty features. # processname: supervisord # config: /etc/supervisor/supervisord.conf # pidfile: /var/run/supervisord.pid # # source function library . / etc / rc.d / init.d / functions RETVAL = 0 start() { echo - n $ "Starting supervisord: " daemon "supervisord -c /etc/supervisor/supervisord.conf " RETVAL = $? echo [ $RETVAL - eq 0 ] && touch / var / lock / subsys / supervisord } stop() { echo - n $ "Stopping supervisord: " killproc supervisord echo [ $RETVAL - eq 0 ] && rm - f / var / lock / subsys / supervisord } restart() { stop start } case "$1" in start) start ;; stop) stop ;; restart|force - reload | reload ) restart ;; condrestart) [ - f / var / lock / subsys / supervisord ] && restart ;; status) status supervisord RETVAL = $? ;; * ) echo $ "Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart}" exit 1 esac exit $RETVAL |
设置自启动
1 2 | chmod 755 / etc / rc.d / init.d / supervisor chkconfig supervisor on |
ps:注意:修改脚本中supervisor配置文件路径为你的supervisor的配置文件路径
PS:Supervisor只能管理非daemon的进程,也就是说Supervisor不能管理守护进程。否则提示Exited too quickly (process log may have details)异常。例子中的Tomcat默认是以守护进程启动的,所以我们改成了catalina.sh run,以前台进程的方式运行。
PS:日志文件/var/log/supervisord.log记录程序启动过程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2017-05-31 Python 之反射和普通方式对比(模拟Web框架)