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查找第k小元素代码分享
Dec 18 Python
python list使用示例 list中找连续的数字
Jan 27 Python
python中global用法实例分析
Apr 30 Python
详谈套接字中SO_REUSEPORT和SO_REUSEADDR的区别
Apr 28 Python
Python连接Redis的基本配置方法
Sep 13 Python
如何用python写一个简单的词法分析器
Dec 18 Python
解决Django后台ManyToManyField显示成Object的问题
Aug 09 Python
如何用Python来理一理红楼梦里的那些关系
Aug 14 Python
通过Turtle库在Python中绘制一个鼠年福鼠
Feb 03 Python
Python loguru日志库之高效输出控制台日志和日志记录
Mar 07 Python
Python实现我的世界小游戏源代码
Mar 02 Python
一行Python命令实现批量加水印
Apr 07 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设计模式 Delegation(委托模式)
2011/06/26 PHP
Drupal7连接多个数据库及常见问题解决
2014/03/02 PHP
PHP重置数组为连续数字索引的几种方式总结
2018/03/12 PHP
URL编码转换,escape() encodeURI() encodeURIComponent()
2006/12/27 Javascript
一个cssQuery对象 javascript脚本实现代码
2009/07/21 Javascript
定义JavaScript二维数组采用定义数组的数组来实现
2012/12/09 Javascript
js onclick事件传参讲解
2013/11/06 Javascript
javascript禁用Tab键脚本实例
2013/11/22 Javascript
如何减少浏览器的reflow和repaint
2015/02/26 Javascript
微信小程序 action-sheet底部菜单详解
2016/10/27 Javascript
实现easyui的datagrid导出为excel的示例代码
2016/11/10 Javascript
node.js中的事件处理机制详解
2016/11/26 Javascript
JavaScript和jQuery制作光棒效果
2017/02/24 Javascript
详解React Native顶|底部导航使用小技巧
2017/09/14 Javascript
vue实现验证码输入框组件
2017/12/14 Javascript
JS基于for语句编写的九九乘法表示例
2018/01/04 Javascript
微信小程序中显示倒计时代码实例
2019/05/09 Javascript
Vue组件化开发之通用型弹出框的实现
2020/02/28 Javascript
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
2017/02/14 Python
Python计时相关操作详解【time,datetime】
2017/05/26 Python
解决pandas中读取中文名称的csv文件报错的问题
2018/07/04 Python
Python3直接爬取图片URL并保存示例
2019/12/18 Python
查看已安装tensorflow版本的方法示例
2020/04/19 Python
借助HTML5 Canvas API制作一个简单的猜字游戏
2016/03/25 HTML / CSS
AmazeUI 折叠面板的实现代码
2020/08/17 HTML / CSS
荷兰男士时尚网上商店:Suitable
2017/12/25 全球购物
MyBag中文网:英国著名的时尚包袋电商零售网站
2020/07/31 全球购物
TCP协议通讯的过程和步骤是什么
2015/10/18 面试题
软件设计的目标是什么
2016/12/04 面试题
灰雀教学反思
2014/04/28 职场文书
公司授权委托书范文
2014/08/02 职场文书
励志演讲稿3分钟
2014/08/21 职场文书
语文教师个人工作总结
2015/02/06 职场文书
2016春季运动会开幕词
2016/03/04 职场文书
毕业生的自我鉴定表范文
2019/05/16 职场文书
golang生成vcf通讯录格式文件详情
2022/03/25 Golang