1.背景

无论多么优秀的程序员都难以避免写出来的程序会有崩溃的一天,特别是c、c++这种高技术含量的语言,一不小心就来个段错误(segment fault),我们通常会写一个守护进程或者守护脚本,检测对应的进程是否退出,如果发现目标进程退出了,就马上在fork或者启动一个新的,这样的检测逻辑不复杂,简单几行代码即可,但是如果你要检查的程序有很多个,用不同的语言编写等等,就比较繁琐了。

2.supervisor安装

今天给大家介绍的这个工具叫supervisor,看名字就知道是一个专门给管理员用的,这个工具非常强大,今天我们只做一个简单而实用的介绍,就是实现用supervisor监管你的程序服务,当程序服务异常退出了,它帮你自动再开启一个新的。

    #supervisor的安装很简单,我们这里以Ubuntu16为例#apt一下即可,别忘了安装之前要update一下apt install -y supervisor#一切顺利之后,你会看到supervisor的服务和对应配置文件信息service supervisor statusls /etc/supervisor/

3.supervisor实战

我们以一个python服务为例子,先看看这个例子的代码如下

    #!/usr/bin/env python# test.py# 如果还没装webpy的,先去webpy官网看安装教程,比较简单# http://webpy.org/import weburls = ('/', 'index')class index:def GET(self):return "Hello, world!"if __name__ == "__main__":app = web.application(urls, globals())app.run()

这是一个用python webpy框架做的一个简单的http服务程序,监听了8080端口提供http服务,使用命令 python test.py 运行即可。

下面我们开始配置supervisor,监控上面我们做的这个简单的程序服务 test.py。在supervisor的配置目录 /etc/supervisor/conf.d 下面创建一个 test_python.conf 的文件。/etc/supervisor/conf.d 这个目录是supervisor用来给配置不同监管用的配置文件夹,supervisor服务会包含这个目录下面所有的conf配置文件,并识别里面的内容对其进程服务进行监管。下面我们看看我们这个 test_python.conf配置内容如下

    #监控服务名称,这个自己起一个名字即可[program:test_python]#指定进程的目录,这里我们是在/tmp创建的,为了演示directory = /tmp#程序启动参数,这个比较简单,用python运行command = python test.py#是否跟随supervisord的启动而启动,我们设置了true是autostart=true#程序退出后自动重启,选择true是autorestart=true#进程被杀死时,是否向这个进程组发送stop信号,包括子进程,选择true是stopasgroup=true#向进程组发送kill信号,包括子进程,选择true是killasgroup=true#下面这几行是日志文件和日志大小和备份个数stdout_logfile=/var/log/test_python.logstdout_logfile_maxbytes = 50MBstdout_logfile_backups  = 10

配置内容比较简单明了,配置完之后,我们重启一下supervisor服务,service supervisor restart,一切顺利之后再用 service supervisor status看看服务运行状态。当supervisor服务重启后,它会发现 test.py 进程没有起来,然后就开启了 test.py 进程。

    ps -ef|grep-v grep|grep test.pyroot     27314 27284  0 10:10 ?        00:00:00 python test.py#把进程kill掉,模拟进程崩溃退出kill -9 27314#再看看程序有没有被重新开起来ps -ef|grep -v grep|grep test.pyroot     27483 27284  4 10:45 ?        00:00:00 python test.py#可以看到进程号已经变了是 27483,证明程序是新启动不是旧的

睿江云官网链接:睿江云主机租用-云服务器-支持免费测试-国内专业的云主机提供商

supervisor 子进程退出_用supervisor监管你的程序,不用担心程序挂了相关推荐

  1. java并发读取相同的文件_高效读取大文件,再也不用担心 OOM 了!

    最近阿粉接到一个需求,需要从文件读取数据,然后经过业务处理之后存储到数据库中.这个需求,说实话不是很难,阿粉很快完成了第一个版本. 内存读取 第一个版本,阿粉采用内存读取的方式,所有的数据首先读读取到 ...

  2. 电脑用户名_学会这一招,再也不用担心电脑的运行速度慢了

    戳 相信对大部分关注了本公众号的小伙伴来说,都会遇到电脑运行速度慢.卡顿的问题.那么我们该如何应对呢?学会这招,轻松解决上述问题!这里小编为大家带了一款能够清理电脑磁盘垃圾文件的软件,有需求的小伙伴一 ...

  3. Linux系统编程之进程退出,父进程等待子进程退出

    1.首先讲一下进程的退出 进程的退出分为正常退出和异常退出: 正常退出: (1)main函数调用return (2)进程调用exit(),标准C库 (3)进程调用_exit()或_Exit(),属于系 ...

  4. Linux进程3:父进程等待(wait,waitpid)子进程退出并收集子进程退出状态,僵尸进程

    父进程等待(wait,waitpid)子进程退出并收集子进程退出状态 1.父进程为什么要等待子进程退出? 创建子进程目的:------干活 我们要知道干活结束没. 子进程退出状态不被收集,变成僵尸进程 ...

  5. python qthread 线程退出_线程:概念和实现

    翻译:老齐 译者注:与本文相关图书推荐:<Python大学实用教程><跟老齐学Python:轻松入门> ★ 本文将分两部分刊发. " 第一部分 Python线程允许程 ...

  6. 线程自动退出_什么是Java的守护线程?

    守护线程是一种支持性线程,主要用于后台调度以及支持性的工作.守护线程具备自动结束生命周期的特性,而非守护线程则不具备.如果对上面的概念一知半解的话,我们先来看一个简单的例子,明白守护线程的执行情况: ...

  7. 查看java线程是否退出_[原创]IDA调试阻止java线程异常退出

    IDA调试阻止java线程异常退出 最近在使用IDA调试分析某款产品遇见了一个头痛的问题,因为程序核心功能在native层实现的,所以主要的侧重点是分析so文件,但是在分析的时候总是出现java线程异 ...

  8. python获取子进程返回值_Python 从subprocess运行的子进程中实时获取输出的例子 Python如何抓取程序的输出?...

    关于python中用subprocess调用exe子进程的问题不懂我的人有什么资格对我指指点点,不了解我的人凭什么对我说三道四的. python杀死子进程后继续执行后面程序 程序a(python写成) ...

  9. 在线提交信息 程序 php,在线短消息收发的程序,不用数据库_php基础_脚本

    在线短消息收发的程序,不用数据库_php基础_脚本 发布时间:2016-06-17 来源: 点击: 次 login.php session_start(); $nickname=$name; sess ...

最新文章

  1. 可集成DevOps的Scrum敏捷工具!
  2. qii, sopc, nios ii 10.1 IP核设计,LED验证死活不行,感觉很神奇
  3. Qt Style Sheets(qt样式表)
  4. Mysql之case when用法总结
  5. Hyperledger Besu(4)身份许可
  6. js中闭包的概念和用法
  7. [答网友问]让GridLength支持动画
  8. zen服务器芯片,服务器版Zen处理器简直大杀器:32核64线程,8通道DDR4内存
  9. 信息学奥赛一本通 1133:输出亲朋字符串 | OpenJudge NOI 1.7 05
  10. Linux 常用开关机以及7个启动级别
  11. Kraken发言人:公司可能会考虑明年上市,但不适合SPAC模式
  12. tperformancegraph_列车运行实绩图,train performance graph,音标,读音,翻译,英文例句,英语词典...
  13. .NET实现中英文验证码
  14. 网络安全系列之培训笔记整理
  15. 折合分数的公式计算机,高考分数换算公式(高考分数折合怎么算)
  16. cygwin里安装apt-cyg网络工具及使用
  17. 基于STM32F407格式化SD卡
  18. html怎样写出x的平方,x的平方怎么打出来
  19. 为什么有实力的公司都不要培训学校出来的程序员!
  20. startActivityForResult废弃了,用Activity Result API吧

热门文章

  1. C#下2\10\16进制互转代码总汇
  2. Adobe_Audition消除人声
  3. haskell程序设计语言
  4. PyCharm运行出现 Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run
  5. IP地址 子网掩码 网关
  6. 子网划分,主机号,网络号计算
  7. PJ2018T4 对称二叉树 树形结构
  8. php radio js,如何使用JavaScript设置radio选中的示例
  9. python包的init文件_Python模块包中__init__.py文件功能分析
  10. linux mint 18.3浏览器,在Linux Mint 19/Ubuntu 18.04中安装Tor Browser浏览器的方法