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

6250921adc56ab427273dcd79f67d747.png

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,证明程序是新启动不是旧的

36f90565a059f8a8cff7dac5496067b1.png

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/559989.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pta7-3 统计不及格人数_应用统计专硕院校专业难度分析【青岛大学、苏大、西安交通大学】...

原文链接:应用统计专硕院校专业难度分析【第十二期】​mp.weixin.qq.com应用统计专硕院校专业难度分析 【第十二期】TO:哈喽,小可爱们早上给你好呀!今天安安姐给你们更新经济类6个专硕院校专业难度分析专题第十二期,大…

mysql数据库事务有几种特性_面试官:你能说说事务的几个特性是啥?有哪几种隔离级别?...

1、面试题事务的几个特点是什么?数据库事务有哪些隔离级别?MySQL的默认隔离级别?2、面试官心里分析用mysql开发的三个基本面:存储引擎、索引,然后就是事务,你必须得用事务。因为一个业务系统里,…

latex 图片大小_用LaTeX写作业——插入图片(二)

方法 subfigure可以横向排列一组图片,会自动编号abcd。在一个 subfigure内使用minipage插入图片,通过控制图片大小实现换行效果 # 效果 代码usepackage{subfigure} %所需宏包 usepackage{graphicx}begin{figure}[htbp] centersubfigure[标题…

python中单例模式是什么_python中的单例模式

单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。比如,某个服务器程序的配置信息存放在一个文件中…

java rsa算法_求RSA算法JAVA实现源代码(带界面的)

展开全部import javax.crypto.Cipher;import java.security.*;import java.security.spec.RSAPublicKeySpec;import java.security.spec.RSAPrivateKeySpec;import java.security.spec.InvalidKeySpecException;import java.security.interfaces.RSAPrivateKey;import java.sec…

java string值传递_String是值传递还是引用传递

string中的坑最近看到一道关于string的面试题,差点让我以为string是值传递,就是下面这个例子,体验下:public class demo{public static void main(string[] args) {demo d new demo();string str "bea";d.change(str)…

java切换jdk版本_切换JDK版本quick

最近遇到一个小问题,同时做两个项目,jdk版本一个是5,一个是6,我也去网上找了找方法,但是感觉不是特别好用,最后自己通过一些环境变量设置的技巧和一些批处理命令来使得这件事情只需要双击,输入一…

Linux下导出MySQL为SQL文件_MySQL导入导出.sql文件步骤

MySQL导入导出.sql文件步骤如下:一.MySQL的命令行模式的设置:桌面->我的电脑->属性->环境变量->新建->PATH“;path\mysql\bin;”其中path为MySQL的安装路径。二.简单的介绍一下命令行进入MySQL的方法:1.C:\>mys…

java 对象视图框架_Stripes视图框架Java对象属性验证和prototype.js Ajax的测试

Stripes视图框架Java对象属性验证,它允许对字段设置是否必须填写,对数字大小进行限制等。我用prototype.js Ajax 将验证后的数据及时地展示出来,下面来看程序。1、编写User实体类此用户共三个属性: name、email、age.package com.…

java中unicode显示乱码_Java 已知Java系统编码是GBK,jtextarea从一编码为Unicode的文本中读取数据,出现乱码,怎么正常显示?...

Java 已知Java系统编码是GBK,jtextarea从一编码为Unicode的文本中读取数据,出现乱码,怎么正常显示?关注:159 答案:2 mip版解决时间 2021-02-03 12:45提问者鉨瞞着所囿亾,爱着誰2021-02-02 16:35我觉得jtextarea中读取…

php怎么seo,怎样学习seo

学习seo的方法:1、从搜索引擎原理开始,学习seo要先从搜索引擎原理开始;2、多思考;3、学习seo要多看高质量的seo教程;4、多和seo高手交流,经常听听大神的seo理论,集百家之所长,这样会…

php ip 短时间 重复,php 限制同一个IP 一段时间不能评论多次,能给我详细解决的...

php 限制同一个IP 一段时间不能评论多次,能给我详细解决的mip版 关注:163 答案:3 悬赏:30解决时间 2021-01-25 15:27已解决2021-01-25 05:54php 限制同一个IP 一段时间不能评论多次,能给我详细解决的最佳答案2021-01-25 06:49在评论的操作中,都需要记录用户ip地址…

java 8 list,JAVA8 ListListInteger list中再装一个list转成一个list操作

我就废话不多说了&#xff0c;大家还是直接看代码吧~List collect IntStream.range(1, 10).boxed().collect(Collectors.toList());List collect1 IntStream.range(10, 20).boxed().collect(Collectors.toList());List> lists new ArrayList<>();lists.add(collect…

matlab中创建一个工程,从文件夹创建新工程

从文件夹创建新工程如果您有许多文件并希望将它们整理为一个工程(无论是否进行源代码管理)&#xff0c;请按照以下步骤创建一个新工程。使用 Simulink Start Page 中的 Folder to Project 模板可轻松将一个文件夹转换为工程。该模板会自动将您的文件添加到工程中&#xff0c;并…

Java定义变量x初始值为3,JAVA 第一章

第一章1.注释&#xff1a;一个好的开发习惯&#xff0c;应该是多编写注释&#xff0c;这样程序的可读性增强。单行注释// 单行注释 &#xff0c;只注释当前行多行注释/*多行注释多行注释*/javadoc 注释/**javadoc 注释javadoc 注释javadoc 注释*/注意&#xff1a;这种注释是比较…

血型算法php,血型排行榜!(真的很准)

一最容易动怒的人是&#xff1a;1.O 型&#xff1a;急性子&#xff0c;一点小事就能惹火他&#xff0c;性格中有好斗的一面&#xff0c;会以 " 我想发泄一下 " 为理由大发雷霆。2.B 型&#xff1a;看上去脾气很好&#xff0c;其实性情很直接&#xff0c;被愤怒冲昏头…

每个java小应用程序都得继承,JAVA复习题3

23.容器JFrame及JPanel默认的布局管理器分别是()A、FlowLayout和GridLayoutB、BorderLayout和FlowLayoutC、FlowLayout和FlowLayoutD、CardLayout和BorderLayout24.在开发一个JAVA GUI程序时&#xff0c;通常都要对按键事件作出响应和处理&#xff0c;一般需要在程序的开头写上…

anaconda下安装python,Windows下Anaconda的安装和简单使用方法

Anaconda is a completely free Python distribution (including for commercial use and redistribution). It includes over 195 of the most popular Python packagesfor science, math, engineering, data analysis.1、安装anaconda之前什么都不需要安装&#xff0c;直接在…

oracle免费云攻略,使用免费的Oracle云服务-创建云主机

上一篇我们讲了如何注册并使用Oracle的免费云服务&#xff0c;这篇我们讲如何创建免费的云主机。进入到控制台后&#xff0c;从左上角的菜单栏进入到Instances的管理界面&#xff1a;然后点击&#xff0c;则会进入创建云主机的界面。创建云主机真的非常简单&#xff0c;甚至你都…

oracle groupq by,oracle group by 性能优化

慕田峪9158850(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效)&#xff1a;ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名&#xff0c;FROM子句中写在最后的表(基础表 driving table)将被最先处理&#xff0c;在FROM子句中包含多个表的情况下,你必须选择记录…