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 18 Python
详细解析Python中的变量的数据类型
May 13 Python
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
Feb 14 Python
python 获取字符串MD5值方法
May 29 Python
Python实现字典(dict)的迭代操作示例
Jun 05 Python
python连接mongodb密码认证实例
Oct 16 Python
selenium3+python3环境搭建教程图解
Dec 07 Python
对Python Class之间函数的调用关系详解
Jan 23 Python
浅谈Django中view对数据库的调用方法
Jul 18 Python
简单了解Django ORM常用字段类型及参数配置
Jan 07 Python
python MultipartEncoder传输zip文件实例
Apr 07 Python
Pycharm导入anaconda环境的教程图解
Jul 31 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
Joomla开启SEF的方法
2016/05/04 PHP
PHP常用文件操作函数和简单实例分析
2016/06/03 PHP
jQuery 获取对象 基本选择与层级
2010/05/31 Javascript
Jqyery中同等与js中windows.onload的应用
2011/05/10 Javascript
node.js中的buffer.copy方法使用说明
2014/12/14 Javascript
jQuery多媒体插件jQuery Media Plugin使用详解
2014/12/19 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 简史
2015/01/09 Javascript
JS扩展方法实例分析
2015/04/15 Javascript
JavaScript中的条件判断语句使用详解
2015/06/03 Javascript
JavaScript数据类型判定的总结笔记
2015/07/31 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
iframe中子父类窗口调用JS的方法及注意事项
2015/08/25 Javascript
jQuery移动web开发之页面跳转和加载外部页面的实现
2015/12/04 Javascript
JS代码防止SQL注入的方法(超简单)
2016/04/12 Javascript
基于js里调用函数时,函数名带括号和不带括号的区别
2016/07/28 Javascript
AngularJs自定义服务之实现签名和加密
2016/08/02 Javascript
JS简单实现tab切换效果的多窗口显示功能
2016/09/07 Javascript
让DIV的滚动条自动滚动到最底部的3种方法(推荐)
2016/09/24 Javascript
jQuery通过ajax快速批量提交表单数据
2016/10/25 Javascript
NodeJS实现不可逆加密与密码密文保存的方法
2018/03/16 NodeJs
vue的.vue文件是怎么run起来的(vue-loader)
2018/12/10 Javascript
微信小程序使用蓝牙小插件
2019/09/23 Javascript
javascript实现贪吃蛇经典游戏
2020/04/10 Javascript
vue基于better-scroll仿京东分类列表
2020/06/30 Javascript
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
2017/07/11 Python
python简单鼠标自动点击某区域的实例
2019/06/25 Python
使用python绘制温度变化雷达图
2019/10/18 Python
Electric官网:美国高级眼镜和配件品牌
2020/06/04 全球购物
求职推荐信范文
2013/12/01 职场文书
老公给老婆的保证书
2014/04/28 职场文书
2014教师教育实践活动对照检查材料思想汇报
2014/09/21 职场文书
整改报告怎么写
2014/11/06 职场文书
三年级上册科学教学计划
2015/01/21 职场文书
工作违纪的检讨书范文
2019/07/09 职场文书
Pytorch 如何实现常用正则化
2021/05/27 Python
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
2022/04/14 Python