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 17 Python
用yum安装MySQLdb模块的步骤方法
Dec 15 Python
Python如何通过subprocess调用adb命令详解
Aug 27 Python
使用paramiko远程执行命令、下发文件的实例
Oct 01 Python
Python实现判断给定列表是否有重复元素的方法
Apr 11 Python
python list是否包含另一个list所有元素的实例
May 04 Python
Python爬虫将爬取的图片写入world文档的方法
Nov 07 Python
Django用户认证系统 User对象解析
Aug 02 Python
Python获取时间范围内日期列表和周列表的函数
Aug 05 Python
安装多个版本的TensorFlow的方法步骤
Apr 21 Python
pytorch __init__、forward与__call__的用法小结
Feb 27 Python
python实现调用摄像头并拍照发邮箱
Apr 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
php 向访客和爬虫显示不同的内容
2009/11/09 PHP
php 字符串中的\n换行符无效、不能换行的解决方法
2014/04/02 PHP
PHP的邮件群发系统phplist配置方法详细总结
2016/03/30 PHP
深入理解php printf() 输出格式化的字符串
2016/05/23 PHP
用正则获取指定路径文件的名称
2007/02/27 Javascript
通过event对象的fromElement属性解决热区设置主实体的一个bug
2008/12/22 Javascript
javascript之通用简单的table选项卡实现(二)
2010/05/09 Javascript
基于JQuery的日期联动实现代码
2011/02/24 Javascript
Javascript Throttle & Debounce应用介绍
2013/03/19 Javascript
jQuery下的动画处理总结
2013/10/10 Javascript
javascript中数组的concat()方法使用介绍
2013/12/18 Javascript
关于javascript中dataset的问题小结
2015/11/16 Javascript
JS模拟实现方法重载示例
2016/08/03 Javascript
jQuery ajaxForm()的应用
2016/10/14 Javascript
JavaScript基于replace+正则实现ES6的字符串模版功能
2017/04/25 Javascript
JavaScript实现简单的星星评分效果
2017/05/18 Javascript
js如何找出字符串中的最长回文串
2018/06/04 Javascript
VUE项目中加载已保存的笔记实例方法
2019/09/14 Javascript
react中hook介绍以及使用教程
2020/12/11 Javascript
[02:44]DOTA2英雄基础教程 魅惑魔女
2014/01/07 DOTA
[01:32]dota2拉比克至宝(222)
2018/12/20 DOTA
flask框架自定义过滤器示例【markdown文件读取和展示功能】
2019/11/08 Python
对python pandas中 inplace 参数的理解
2020/06/27 Python
如何在Anaconda中打开python自带idle
2020/09/21 Python
世界上最大的家庭自动化公司:Smarthome
2017/12/20 全球购物
北美个性化礼品商店:Things Remembered
2018/06/12 全球购物
NBA欧洲商店(西班牙):NBA Europe Store ES
2019/04/16 全球购物
Roxy荷兰官方网站:冲浪、滑雪板、服装和配件
2019/10/22 全球购物
函数只定义了一次, 调用了一次, 但编译器提示非法重定义了-什么问题?
2014/10/03 面试题
专升本自我鉴定
2013/10/10 职场文书
办公室员工岗位工作职责
2014/03/10 职场文书
先进基层党组织材料
2014/12/25 职场文书
简历自荐信范文
2015/03/09 职场文书
2015年世界无车日活动总结
2015/03/23 职场文书
演讲开场白台词大全
2015/05/29 职场文书
创业计划书之o2o水果店
2019/08/30 职场文书