Python使用Supervisor来管理进程的方法


Posted in Python onMay 28, 2015

本文实例讲述了Python使用Supervisor来管理进程的方法。分享给大家供大家参考。具体分析如下:

Supervisor可以启动、停止、重启*nix系统中的程序。也可以重启崩溃的程序。

supervisord的一个守护进程,用于将指定的进程当做子进程来运行。

supervisorctl是一个客户端程序,可以查看日志并通过统一的会话来控制进程。

看例子:

我们写了一个py脚本,用于往log文件中记录一条当前的时间。

root@ubuntu:/home/zoer# cat daemon.py
#!/usr/bin/env python
import time
import os
time.sleep(1)
f=open("log",'a')
t=time.time()
f.write(str(t))
f.write("\n")
f.close()

安装过程就不说了。

安装完毕supervisor之后【将配置文件放在/etc下】。修改配置文件,在最后增加如下内容:

[program:ddd]
command=/home/zoer/daemon.py
autorestart=true

然后我们启动supervisor并启动daemon.py的执行。

root@ubuntu:/home/zoer# supervisord 
/usr/local/lib/python2.7/dist-packages/supervisor-3.0b1-py2.7.egg/supervisor/options.py:286: UserWarning: Supervisord is running as root and it is searching for its configuration file in default locations (including its current working directory); you probably want to specify a "-c" argument specifying an absolute path to a configuration file for improved security. 
 'Supervisord is running as root and it is searching ' 
root@ubuntu:/home/zoer# supervisorctl 
ddd               STARTING   
supervisor> start ddd 
ddd: ERROR (already started) 
supervisor> stop ddd 
ddd: stopped 
supervisor> start ddd 
ddd: started 
supervisor>

从上面的例子中,看到,可以通过start或者stop命令来启动或者停止ddd这个进程。ddd这里就是我们在配置文件中增加的内容(daemon.py这个脚本)。

也可以使用restart。如下:

supervisor> restart  ddd
ddd: stopped
ddd: started

下面我们测试一下,假设说我们手动kill掉了ddd这个进程,那么ddd会自动恢复执行吗?

为了做实验,把代码修改如下:

root@ubuntu:/home/zoer# cat daemon.py  
#!/usr/bin/env python 
import time 
import os 
while True: 
  time.sleep(1) 
  f=open("log",'a') 
  t=time.time() 
  f.write(str(t)) 
  f.write("\n") 
  f.close()

通过ps可以找到这个进程的id:

root   9354 0.2 0.4 10924 4200 ?    S  23:16  0:00 python /home/zoer/daemon.py 
root   9395 0.0 0.0  4392  832 pts/3  S+  23:17  0:00 grep --color=auto daemon 
root@ubuntu:/home/zoer#

看下面的操作:

root@ubuntu:/home/zoer# rm log;touch log;kill 9354
root@ubuntu:/home/zoer# cat log 
1364710712.51 
root@ubuntu:/home/zoer# cat log 
1364710712.51 
1364710713.51 
root@ubuntu:/home/zoer# cat log 
1364710712.51 
1364710713.51 
root@ubuntu:/home/zoer# cat log 
1364710712.51 
1364710713.51 
1364710714.52 
root@ubuntu:/home/zoer# cat log 
1364710712.51 
1364710713.51 
1364710714.52 
1364710715.52

删除了log文件,并且重新创建。然后干掉了daemon.py的那个进程。会发现log内容又重新有新的内容了。再次ps查看进程号。

root   9429 0.1 0.4 10924 4200 ?    S  23:18  0:00 python /home/zoer/daemon.py 
root   9440 0.0 0.0  4392  828 pts/3  S+  23:19  0:00 grep --color=auto daemon 
root@ubuntu:/home/zoer#

会发现进程号已经变成9429了。说明supervisor已经重启了被干掉了的进程。

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python多线程http下载实现示例
Dec 30 Python
Python的Flask框架的简介和安装方法
Nov 13 Python
简述Python中的进程、线程、协程
Mar 18 Python
Python入门必须知道的11个知识点
Mar 21 Python
PyQt5每天必学之QSplitter实现窗口分隔
Apr 19 Python
Django中的forms组件实例详解
Nov 08 Python
Python 如何优雅的将数字转化为时间格式的方法
Sep 26 Python
Pyecharts绘制全球流向图的示例代码
Jan 08 Python
基于matplotlib xticks用法详解
Apr 16 Python
Python学习之路安装pycharm的教程详解
Jun 17 Python
PyTorch 导数应用的使用教程
Aug 31 Python
如何用Python徒手写线性回归
Jan 25 Python
Python运算符重载用法实例
May 28 #Python
Python smallseg分词用法实例分析
May 28 #Python
Python基于smtplib实现异步发送邮件服务
May 28 #Python
Python使用Scrapy爬取妹子图
May 28 #Python
Python实现统计单词出现的个数
May 28 #Python
Python下载懒人图库JavaScript特效
May 28 #Python
Python实现给qq邮箱发送邮件的方法
May 28 #Python
You might like
使用php重新实现PHP脚本引擎内置函数
2007/03/06 PHP
PHP中获取文件扩展名的N种方法小结
2012/02/27 PHP
基于php常用函数总结(数组,字符串,时间,文件操作)
2013/06/27 PHP
8个PHP数组面试题
2015/06/23 PHP
修复ShopNC使用QQ 互联时提示100010 错误
2015/11/08 PHP
php计算年龄精准到年月日
2015/11/17 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
jQuery 表单验证插件formValidation实现个性化错误提示
2009/06/23 Javascript
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
2011/06/02 Javascript
jquery实现弹出div,始终显示在屏幕正中间的简单实例
2014/03/08 Javascript
使用jQuery实现图片遮罩半透明坠落遮挡
2015/03/16 Javascript
PHP+jQuery实现随意拖动层并即时保存拖动位置
2015/04/30 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
2016/09/06 Javascript
Nodejs基于LRU算法实现的缓存处理操作示例
2017/03/17 NodeJs
分享Bootstrap简单表格、表单、登录页面
2017/08/04 Javascript
react-native 完整实现登录功能的示例代码
2017/09/11 Javascript
Vue.js 利用v-for中的index值实现隔行变色
2018/08/01 Javascript
vue中render函数的使用详解
2018/10/12 Javascript
layer iframe 设置关闭按钮的方法
2019/09/12 Javascript
100行代码实现vue表单校验功能(小白自编)
2019/11/19 Javascript
vue 组件简介
2020/07/31 Javascript
用Python输出一个杨辉三角的例子
2014/06/13 Python
教你利用Python玩转histogram直方图的五种方法
2018/07/30 Python
Python画图实现同一结点多个柱状图的示例
2019/07/07 Python
Python中的相关分析correlation analysis的实现
2019/08/29 Python
python tornado修改log输出方式
2019/11/18 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
2020/02/14 Python
python数据预处理 :数据抽样解析
2020/02/24 Python
Selenium基于PIL实现拼接滚动截图
2020/04/10 Python
python中reload重载实例用法
2020/12/15 Python
New delete 与malloc free 的联系与区别
2013/02/04 面试题
.NET程序员的几道面试题
2012/06/01 面试题
优秀员工个人的自我评价
2013/11/29 职场文书
创业计划书六个要素
2013/12/26 职场文书
文明倡议书
2015/01/19 职场文书
幼儿教师年度个人总结
2015/02/05 职场文书