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中的列表推导浅析
Apr 26 Python
Python3.6简单操作Mysql数据库
Sep 12 Python
python实现二分查找算法
Sep 21 Python
python如何在列表、字典中筛选数据
Mar 19 Python
pandas series序列转化为星期几的实例
Apr 11 Python
详解Python中的四种队列
May 21 Python
解决PyCharm同目录下导入模块会报错的问题
Oct 13 Python
python装饰器简介---这一篇也许就够了(推荐)
Apr 01 Python
Python3+Selenium+Chrome实现自动填写WPS表单
Feb 12 Python
简单了解Python write writelines区别
Feb 27 Python
python基于openpyxl生成excel文件
Dec 23 Python
浅析Python OpenCV三种滤镜效果
Apr 11 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 中执行排序与 MySQL 中排序
2009/04/21 PHP
分享一个php 的异常处理程序
2014/06/22 PHP
php计算到指定日期还有多少天的方法
2015/04/14 PHP
php Session无效分析资料整理
2016/11/29 PHP
如何判断php mysqli扩展类是否开启
2016/12/24 PHP
jquery URL参数判断,确定菜单样式
2010/05/31 Javascript
jquery 圆形旋转图片滚动切换效果
2011/01/19 Javascript
javascript数组快速打乱重排的方法
2014/01/02 Javascript
原生js实现日期联动
2015/01/12 Javascript
JavaScript原生xmlHttp与jquery的ajax方法json数据格式实例
2015/12/04 Javascript
BootStrap和jQuery相结合实现可编辑表格
2016/04/21 Javascript
JS及PHP代码编写八大排序算法
2016/07/12 Javascript
vue-cli+webpack在生成的项目中使用bootstrap实例代码
2017/05/26 Javascript
关于JavaScript语句后面的分号问题
2017/12/07 Javascript
详解webpack之scss和postcss-loader的配置
2018/01/09 Javascript
如何编写一个 Webpack Loader的实现
2020/10/18 Javascript
介绍Python中几个常用的类方法
2015/04/08 Python
基于Python实现的百度贴吧网络爬虫实例
2015/04/17 Python
在IPython中执行Python程序文件的示例
2018/11/01 Python
对python插入数据库和生成插入sql的示例讲解
2018/11/14 Python
Python从数据库读取大量数据批量写入文件的方法
2018/12/10 Python
Python单元和文档测试实例详解
2019/04/11 Python
python实现测试工具(一)——命令行发送get请求
2020/10/19 Python
Oakley西班牙官方商店:太阳眼镜和男女运动服
2019/04/26 全球购物
如何强制垃圾回收
2015/10/06 面试题
长青弘远的面试题
2012/06/09 面试题
担保书怎么写
2014/04/01 职场文书
2014年母亲节演讲稿范文
2014/05/07 职场文书
员工薪酬激励方案
2014/06/13 职场文书
销售员自我评价
2015/03/11 职场文书
2015高中教师个人工作总结
2015/07/21 职场文书
2015新教师教学工作总结
2015/07/22 职场文书
任命书格式范文
2015/09/22 职场文书
全国劳模先进事迹材料(2016精选版)
2016/02/25 职场文书
python APScheduler执行定时任务介绍
2022/04/19 Python
Redis基本数据类型Zset有序集合常用操作
2022/06/01 Redis