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 循环遍历字典元素的简单方法
Sep 11 Python
Python 闭包的使用方法
Sep 07 Python
python将处理好的图像保存到指定目录下的方法
Jan 10 Python
python如何实现不可变字典inmutabledict
Jan 08 Python
Python对象的属性访问过程详解
Mar 05 Python
python使用pyecharts库画地图数据可视化的实现
Mar 25 Python
keras处理欠拟合和过拟合的实例讲解
May 25 Python
Keras 使用 Lambda层详解
Jun 10 Python
基于Python实现视频的人脸融合功能
Jun 12 Python
浅谈sklearn中predict与predict_proba区别
Jun 28 Python
2021年的Python 时间轴和即将推出的功能详解
Jul 27 Python
Python实现文本文件拆分写入到多个文本文件的方法
Apr 18 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图形计数器程序显示网站用户浏览量
2016/07/20 PHP
实例分析PHP中PHPMailer发邮件
2017/12/13 PHP
PHP封装的分页类与简单用法示例
2019/02/25 PHP
asp.net+js 实现无刷新上传解析csv文件的代码
2010/05/17 Javascript
jquerymobile checkbox及时刷新才能获取其准确值
2012/04/14 Javascript
IE6下拉框图层问题探讨及解决
2014/01/03 Javascript
javascript实现的一个随机点名功能
2014/08/26 Javascript
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
JS实现的仿淘宝交易倒计时效果
2015/11/27 Javascript
javascript中不易分清的slice,splice和split三个函数
2016/03/29 Javascript
AngularJS延迟加载html template
2016/07/27 Javascript
ionic组件ion-tabs选项卡切换效果实例
2016/08/27 Javascript
angularjs 实现带查找筛选功能的select下拉框实例
2017/01/11 Javascript
微信小程序基于本地缓存实现点赞功能的方法
2017/12/18 Javascript
不到200行 JavaScript 代码实现富文本编辑器的方法
2018/01/03 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
2018/08/19 Javascript
Jquery动态列功能完整实例
2019/08/30 jQuery
原生js滑动轮播封装
2020/07/31 Javascript
用Python从零实现贝叶斯分类器的机器学习的教程
2015/03/31 Python
python实现随机梯度下降(SGD)
2020/03/24 Python
python多线程共享变量的使用和效率方法
2019/07/16 Python
Spring实战之使用util:命名空间简化配置操作示例
2019/12/09 Python
有关Tensorflow梯度下降常用的优化方法分享
2020/02/04 Python
Python基础之字典常见操作经典实例详解
2020/02/26 Python
python如何求100以内的素数
2020/05/27 Python
python中tab键是什么意思
2020/06/18 Python
python转化excel数字日期为标准日期操作
2020/07/14 Python
python更新数据库中某个字段的数据(方法详解)
2020/11/18 Python
值得收藏的HTML5资源(学习html5的朋友可以收藏下)
2010/07/20 HTML / CSS
ReVive利维肤美国官网:RéVive Skincare
2018/04/18 全球购物
市场营销专业个人求职信范文
2013/12/14 职场文书
天猫某品牌专卖店运营计划书
2014/03/21 职场文书
个人安全生产承诺书
2014/05/22 职场文书
优秀党员学习焦裕禄精神思想汇报范文
2014/09/10 职场文书
运动会广播稿200字(10篇)
2014/10/12 职场文书
上甘岭观后感
2015/06/10 职场文书