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 网络编程常用代码段
Aug 28 Python
详解python异步编程之asyncio(百万并发)
Jul 07 Python
CentOS7下python3.7.0安装教程
Jul 30 Python
浅析python3中的os.path.dirname(__file__)的使用
Aug 30 Python
对python中字典keys,values,items的使用详解
Feb 03 Python
python ChainMap的使用和说明详解
Jun 11 Python
python异常处理和日志处理方式
Dec 24 Python
Python高阶函数、常用内置函数用法实例分析
Dec 26 Python
关于win10在tensorflow的安装及在pycharm中运行步骤详解
Mar 16 Python
Python定义一个函数的方法
Jun 15 Python
Python使用urlretrieve实现直接远程下载图片的示例代码
Aug 17 Python
python中random.randint和random.randrange的区别详解
Sep 20 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函数
2006/10/09 PHP
Codeigniter实现智能裁剪图片的方法
2014/06/12 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
2017/02/04 PHP
thinkPHP3.2.2框架行为扩展及demo示例
2018/06/19 PHP
JavaScript基本概念初级讲解论坛贴的学习记录
2009/02/22 Javascript
js为鼠标添加右击事件防止默认的右击菜单弹出
2013/07/29 Javascript
Jquery中$.post和$.ajax的用法小结
2015/04/28 Javascript
js支持键盘控制的左右切换立体式图片轮播效果代码分享
2015/08/26 Javascript
js实现网页收藏功能
2015/12/17 Javascript
微信小程序 wxapp视图容器 view详解
2016/10/31 Javascript
vue2.0多条件搜索组件使用详解
2020/03/26 Javascript
p5.js实现斐波那契螺旋的示例代码
2018/03/22 Javascript
vue-cli3+ts+webpack实现多入口多出口功能
2019/05/30 Javascript
从零学Python之入门(二)基本数据类型
2014/05/25 Python
对于Python编程中一些重用与缩减的建议
2015/04/14 Python
Python中tell()方法的使用详解
2015/05/24 Python
Python读取图片属性信息的实现方法
2016/09/11 Python
python 删除大文件中的某一行(最有效率的方法)
2017/08/19 Python
python中使用正则表达式的后向搜索肯定模式(推荐)
2017/11/11 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
2019/01/04 Python
python轮询机制控制led实例
2020/05/03 Python
使用Python文件读写,自定义分隔符(custom delimiter)
2020/07/05 Python
纯css3实现照片墙效果
2014/12/26 HTML / CSS
Pretty Little Thing爱尔兰:时尚女性服饰
2017/03/27 全球购物
教师绩效考核方案
2014/01/21 职场文书
签约仪式主持词
2014/03/19 职场文书
市政管理求职信范文
2014/05/07 职场文书
采购部长岗位职责
2014/06/13 职场文书
垃圾分类的活动方案
2014/08/15 职场文书
党员干部批评与自我批评反四风思想汇报
2014/09/21 职场文书
小学“向国旗敬礼”网上签名寄语活动总结
2014/09/27 职场文书
数学教师个人工作总结
2015/02/06 职场文书
小时代观后感
2015/06/10 职场文书
利用ajax+php实现商品价格计算
2021/03/31 PHP
使用Djongo模块在Django中使用MongoDB数据库
2021/06/20 Python
golang内置函数len的小技巧
2021/07/25 Golang