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中字典(Dictionary)用法实例详解
May 30 Python
Python3中关于cookie的创建与保存
Oct 21 Python
pygame实现俄罗斯方块游戏(基础篇2)
Oct 29 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
Feb 07 Python
安装完Python包然后找不到模块的解决步骤
Feb 13 Python
在python中利用dict转json按输入顺序输出内容方式
Feb 27 Python
python json.dumps中文乱码问题解决
Apr 01 Python
PyCharm配置anaconda环境的步骤详解
Jul 31 Python
容易被忽略的Python内置类型
Sep 03 Python
一篇文章搞懂python的转义字符及用法
Sep 03 Python
搭建pypi私有仓库实现过程详解
Nov 25 Python
Python与C/C++的相互调用案例
Mar 04 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语法速查表
2007/01/02 PHP
PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
2012/01/16 PHP
关于PHP递归算法和应用方法介绍
2013/04/15 PHP
php 模拟post_验证页面的返回状态(实例讲解)
2013/10/28 PHP
php分页代码学习示例分享
2014/02/20 PHP
在PHP模板引擎smarty生成随机数的方法和math函数详解
2014/04/24 PHP
php相对当前文件include其它文件的方法
2015/03/13 PHP
js 图片随机不定向浮动的实现代码
2013/07/02 Javascript
JQuery中form验证出错信息的查看方法
2013/10/08 Javascript
在线一元二次方程计算器实例(方程计算器在线计算)
2013/12/22 Javascript
jQuery实现带分组数据的Table表头排序实例分析
2015/11/24 Javascript
iframe与主框架跨域相互访问实现方法
2017/09/14 Javascript
Vue 创建组件的两种方法小结(必看)
2018/02/23 Javascript
实例详解vue.js浅度监听和深度监听及watch用法
2018/08/16 Javascript
JS中DOM元素的attribute与property属性示例详解
2018/09/04 Javascript
JS利用prototype给类添加方法操作详解
2019/06/21 Javascript
微信小程序把百度地图坐标转换成腾讯地图坐标过程详解
2019/07/10 Javascript
JS工厂模式开发实践案例分析
2019/10/17 Javascript
基于JavaScript获取base64图片大小
2019/10/18 Javascript
Vue+ElementUI使用vue-pdf实现预览功能
2019/11/26 Javascript
Vue.js暴露方法给WebView的使用操作
2020/09/07 Javascript
python3中set(集合)的语法总结分享
2017/03/24 Python
python中的set实现不重复的排序原理
2018/01/24 Python
浅谈python新式类和旧式类区别
2019/04/26 Python
python list多级排序知识点总结
2019/10/23 Python
Python列表如何更新值
2020/05/27 Python
如何解决cmd运行python提示不是内部命令
2020/07/01 Python
纯css3实现的鼠标悬停动画按钮
2014/12/23 HTML / CSS
世界第一冲浪品牌:O’Neill
2016/08/30 全球购物
如何手工释放资源
2013/12/15 面试题
人力资源管理专业应届生求职信
2013/09/28 职场文书
岗位安全生产责任书
2014/07/28 职场文书
2014年营业员工作总结
2014/11/18 职场文书
爱国影片观后感
2015/06/18 职场文书
摘录式读书笔记
2015/07/01 职场文书
JavaScript实现外溢动态爱心的效果的示例代码
2022/03/21 Javascript