前言

对于大部分程序员来说,主要工作都是进行编码以及一些简单的中间件安装,这就导致了很多人对于“运维”相关的工作会比较生疏。例如当我们拥有一台自己的服务器以后,可能会在上面跑一跑自己blog程序,mysql,nginx等等。当程序越来越多了没有一个统一的入口管理启停,也可能会遇到一些特殊的原因导致程序被kill掉了,这时候又没装相关的监控程序或者脚本(太麻烦了懒得装,机器配置差不想装),所以只能当我们访问自己程序发现异常的时候才会登上服务器查找原因。

这些状况对我们来说是比较麻烦的,那么这就需要一个“神器”来解放我们的双手,铛铛铛!!Supervisor 就来了。

正文

Supervisor 介绍

Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。

supervisor 安装

简单粗暴

yum install supervisor -y

supervisor 配置说明

通过这种形式安装的supervisor,其配置文件的目录位于:
/etc/supervisord.conf (主配置文件,下面会详细介绍)
/etc/supervisor.d/ (默认子进程配置文件,也就是需要我们根据程序配置的地方)


supervisord.conf 基本配置项说明,由于其参数比较多,这些只贴出一些常用的配置项,详细内容可参阅官网。温馨提示“;” 符号是表示该行配置被注释。

[unix_http_server]
file=/home/supervisor/supervisor.sock   ; supervisorctl使用的 socket文件的路径
;chmod=0700                 ; 默认的socket文件权限0700
;chown=nobody:nogroup       ; socket文件的拥有者[inet_http_server]         ; 提供web管理后台管理相关配置
port=0.0.0.0:9001          ; web管理后台运行的ip地址及端口,绑定外网需考虑安全性
;username=root             ; web管理后台登录用户名密码
;password=root[supervisord]
logfile=/var/log/supervisord.log ; 日志文件,默认在$CWD/supervisord.log
logfile_maxbytes=50MB        ; 日志限制大小,超过会生成新文件,0表示不限制
logfile_backups=10           ; 日志备份数量默认10,0表示不备份
loglevel=info                ; 日志级别
pidfile=/home/supervisor/supervisord.pid ; supervisord pidfile; default supervisord.pid              ; pid文件
nodaemon=false               ; 是否在前台启动,默认后台启动false
minfds=1024                  ; 可以打开文件描述符最小值
minprocs=200                 ; 可以打开的进程最小值[supervisorctl]
serverurl=unix:///home/supervisor/supervisor.sock ; 通过socket连接supervisord,路径与unix_http_server->file配置的一致

 

[include]
files = supervisor.d/*.conf ;指定了在当前目录supervisor.d文件夹下配置多个配置文件

  

准备测试项目

 

这里我打包了一个简单的spring-boot程序,存放与“/opt/project/”下。

在这个程序中我们只是简单的定义了一个rest接口,主要用于演示作用。

@RestController
public class HelloController {@RequestMapping("/hello")public String hello(){return "hello world";}
}

如果不用supervisor的话,我们启动程序一般用一下命令

nohup java -jar springboot-hello-sample.jar &

这是以后台的方式启动jar包,程序运行相关输出会在nohup.out中,我们我们就不再赘述了,那么我们来看一下,切换到supervisor的方式,我们是怎么配置项目,以及管理的呢?

定义supervisor管理进程配置文件

从上面的配置文件[include]->files配置项我们可以知道,supervisor会把supervisor.d/下以conf结尾的配置文件都加载进来,那么我们在这个目录下面新建一个sboot.conf,内容如下:

[program:sboot] ;[program:xxx] 这里的xxx是指的项目名字
directory = /opt/project  ;程序所在目录
command =  java -jar springboot-hello-sample.jar ;程序启动命令
autostart=true ;是否跟随supervisord的启动而启动
autorestart=true; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
stopasgroup=true;进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=true;向进程组发送kill信号,包括子进程
stdout_logfile=/var/log/sboot/supervisor.log;该程序日志输出文件,目录需要手动创建
stdout_logfile_maxbytes = 50MB;日志大小
stdout_logfile_backups  = 100;备份数

可以看到,在配置文件里面已经有配置该程序名,启动路径等,这样一来,supervisor就可以完全的掌管程序的生死了。接着我们执行

service supervisord restart

重启supervisord。

观察效果

浏览器输入:服务器ip:9001 (这里的web管理页面端口是在配置文件配置好的。)

如图所示,我们可以可以观察到springboot程序已经是running状态了,pid是27517,我们可以点击Tail -f来观察输出日志,它的作用跟我们在服务器直接“tail -f”是类似的。

这里我们为了方便演示就没有添加验证了,如果大家是在公网的使用环境,需要配置文件里面的用户名密码验证注释打开。不然别人扫出你的后台管理页面就可以随意控制程序了。

除了web管理页面,还有一些简单的命令也是需要我们掌握的。

直接在命令行输入supervisorctl会展示当前已配置好的项目信息。

[root@wangzh supervisor.d]# supervisorctl
sboot                            RUNNING   pid 27517, uptime 0:18:04
supervisor>

然后可以执行

start/stop/restart sboot 来简单控制项目的启停等

  

其他常用命令

supervisorctl update #更新配置文件
supervisorctl reload #重新启动配置的程序
supervisorctl stop all #停止全部管理进程

  

结语

只需要一点简单的配置,就可以统一的管理我们的程序了,同时也可以在进程意外死掉的时候自动重启,这些工作以后就交给supervisor了,我们只要掌握一点简单的命令就可以“为所欲为”。

supervisor官网:http://www.supervisord.org/

文章首发于微信公众号《深夜里的程序猿》,转载务必注明出处,侵权必究。

转载于:https://www.cnblogs.com/coding-night/p/10694055.html

解放程序员双手之Supervisor相关推荐

  1. 解放程序员双手!GPT-3自动生成SQL语句 | 代码开源

    金磊 发自 凹非寺 量子位 报道 | 公众号 QbitAI "无所不能"的GPT-3,现在又来解放程序员们的双手了. 像这样,只需用简单的英文问下GPT-3"上个月注册了 ...

  2. 网易发布云计算战略,“为解放程序员而来”

    作为今年互联网行业最热门的领域,云计算一直新闻不断,继BAT召开一系列发布会.亚马逊AWS中国区云服务开启商用之后,9月20日,网易公司在上海举行发布会,首度推出"网易云",并将其 ...

  3. 低代码解放程序员?子弹还得飞一会儿!

    普通人建一个应用程序就像搭乐高一样简单,技术似乎已经给出了路径,但还需要沉淀和发力的空间 文 | 吴俊宇 编辑 | 谢丽容 今年6月,一家头部云厂商SaaS架构师为某零售企业演示了如何用低代码半小时搭 ...

  4. 程序员双手飞快敲键盘的时候是在敲代码吗?

    当你看到一个程序员的两只手在键盘上上下翻飞,行云流水的时候,多半不是在敲击代码 大概率是在跟产品经理撕逼讨论需求另一种可能就是在跟测试打口水仗 10%几率是在论坛码字摸鱼或者和人家开喷了. 1%几率是 ...

  5. 新 IDE 出现,程序员迎来危机?

    作者 | Douglas Vaghetti 编译 | 张洁     责编 | 屠敏 现在正是从事技术工作的好时机!工资飙升.大量的招聘邮件迎来而来.越来越多的从业者通过培训跨行到技术领域.远程工作可以 ...

  6. 程序员提前下班的福音来了!GitHub、OpenAI 联手推出 AI 代码生成神器

    整理 | 苏宓 出品 | CSDN(ID:CSDNnews) 编程门槛正在降低,编程效率正在提升,我们距离「人人都能成为开发者」的目标更近一步.这不,微软正式宣布发布了一个人工智能代码建议方案--Gi ...

  7. python程序员收入-python收入

    一位匿名知乎网友爆料用Python写了自动化交易程序,2年躺着赚了200万,相当于普通程序员10年的工资-- "除了不会生孩子,什么都会"的Python,不仅能躺着赚钱,冲击百万年 ...

  8. 趣挨踢 | “菜鸟”程序员和“大神”程序员的差别竟然这么大...

    戳蓝字"CSDN云计算"关注我们哦! 出处 | [51CTO技术栈]   程序员这个物种自诞生以来,便产生了森严的等级制度,划分标准十分复杂却又有规律可循. 我们暂且分为:菜鸟.普 ...

  9. 如何提高程序员的生产率 (1)

    2019独角兽企业重金招聘Python工程师标准>>> 版权声明:本文由韩伟原创文章,转载请注明出处:  文章原文链接:https://www.qcloud.com/communit ...

最新文章

  1. 2019-03-20 Python爬取需要登录的有验证码的网站
  2. JAVA C++ 左花括号{该另起一行写还是写在行尾的思考
  3. 【Vegas原创】GridView设定DataFormatString属性失效的解决方法
  4. 鲲鹏云HCIA知识总结(二)
  5. 网狐棋牌(二) CQueueServiceEvent初步分析
  6. 转:如何用gcc编译生成动态链接库*.so文件 动态库
  7. vue读取终端硬件信息_双通道RFID模块助力电力数据采集终端(不必多说,直接测试对比)...
  8. 【Windows】关于shift和空格同时按无反应的解决方案
  9. 带刺的下沉市场:小镇青年要的不止是9块9包邮
  10. ant design Cascader 实现联动省市区数据
  11. Word如何快速绘制你需要的作文稿纸
  12. 思维导图与知识树/大纲/目录的区别是什么?
  13. 如何使用Lumion创建惊艳的渲染
  14. FPGA是什么呢,通透讲解单片机和FPGA的区别
  15. 记一次应急-插U盘之后文件夹全变成exe中毒(100%解决)
  16. MSP430 IO操作
  17. 一颗 “不安分” 的螺丝钉
  18. 亲历华为手机丢失通过定位找回
  19. phpmyadmin 4.8.1漏洞复现(实战演示)
  20. 单机率公式计算机车日产量,货运机车平均日产量

热门文章

  1. java excel导入前台_java上传excel表格并读取数据返回到前台
  2. 22.25在计算机中如何储存,浮点数在计算机中存储方式
  3. mysql简单索引_mysql简单索引
  4. led灯光衰怎么解决_车灯不亮怎么办?成都车灯改装店为您带来科学合理车灯升级方案...
  5. css 字体大小_用一个 CSS 属性打造自适应网站
  6. tomcat怎么平滑更新项目_SpringBoot内置tomcat启动原理
  7. 半导体基础知识(2):PN结二极管和二极管特性
  8. FPGA之道(57)状态机的实现方式
  9. Cordic算法——verilog实现
  10. 【 MATLAB 】Contour plot of matrix(矩阵的等高线图)