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正则表达式判断字符串是否是全部小写示例
Dec 25 Python
python计算牛顿迭代多项式实例分析
May 07 Python
对于Python装饰器使用的一些建议
Jun 03 Python
python实现爬虫统计学校BBS男女比例之数据处理(三)
Dec 31 Python
python嵌套函数使用外部函数变量的方法(Python2和Python3)
Jan 31 Python
Python中Iterator迭代器的使用杂谈
Jun 20 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
Dec 19 Python
django中ORM模型常用的字段的使用方法
Mar 05 Python
django之静态文件 django 2.0 在网页中显示图片的例子
Jul 28 Python
Python OrderedDict的使用案例解析
Oct 25 Python
Django多进程滚动日志问题解决方案
Dec 17 Python
python操作链表的示例代码
Sep 27 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
使用XDebug调试及单元测试覆盖率分析
2011/01/27 PHP
在IIS下安装PHP扩展的方法(超简单)
2017/04/10 PHP
Mac下关于PHP环境和扩展的安装详解
2019/10/17 PHP
jQuery方法简洁实现隔行换色及toggleClass的使用
2013/03/15 Javascript
javascript full screen 全屏显示页面元素的方法
2013/09/27 Javascript
jqGrid读取选择的多行的某个属性代码
2014/05/18 Javascript
[原创]推荐10款最热门jQuery UI框架
2014/08/19 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
2015/02/24 Javascript
javascript使用avalon绑定实现checkbox全选
2015/05/06 Javascript
深入理解js数组的sort排序
2016/05/28 Javascript
jQuery将表单序列化成一个Object对象的实例
2016/11/29 Javascript
JavaScript循环_动力节点Java学院整理
2017/06/28 Javascript
vue.js学习之vue-cli定制脚手架详解
2017/07/02 Javascript
vue 实现 tomato timer(蕃茄钟)实例讲解
2017/07/24 Javascript
详解Vue微信授权登录前后端分离较为优雅的解决方案
2018/06/29 Javascript
快速搭建Node.js(Express)用户注册、登录以及授权的方法
2019/05/09 Javascript
vue中$refs, $emit, $on, $once, $off的使用详解
2019/05/26 Javascript
uni-app如何实现增量更新功能
2020/01/03 Javascript
javascript+css实现进度条效果
2020/03/25 Javascript
基于Ionic3实现选项卡切换并重新加载echarts
2020/09/24 Javascript
[01:31]完美与DOTA2历程
2014/07/31 DOTA
[05:31]DOTA2上海特级锦标赛主赛事第三日RECAP
2016/03/05 DOTA
Python中的模块导入和读取键盘输入的方法
2015/10/16 Python
Python实现读取json文件到excel表
2017/11/18 Python
python 制作自定义包并安装到系统目录的方法
2018/10/27 Python
详解10个可以快速用Python进行数据分析的小技巧
2019/06/24 Python
python SOCKET编程基础入门
2021/02/27 Python
CSS3实现的炫酷菜单代码分享
2015/03/12 HTML / CSS
英国森林假期:Forest Holidays
2021/01/01 全球购物
单位实习证明怎么写
2014/01/17 职场文书
音乐教学随笔感言
2014/02/19 职场文书
2015年大学班级工作总结
2015/04/28 职场文书
校园广播稿范文
2015/08/19 职场文书
怎样写好演讲稿题目?
2019/08/21 职场文书
如何使用 resize 实现图片切换预览功能
2021/08/23 HTML / CSS
Redis实现短信验证码登录的示例代码
2022/06/14 Redis