码迷,mamicode.com
首页 > 其他好文 > 详细

守护进程和supervisor

时间:2014-07-31 09:57:16      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:style   http   color   使用   os   strong   文件   数据   

守护进程和supervisor


前言

接触守护进程已经很久了,但是在工作中有时候却经常忘记它。这次是在需要后台跑一个十几万的数据处理工作,耗时较长的时候,习以为常的通过&将脚本放到后台去执行,将标准输出和错误输出重定向到日志文件。然后干其他的事情,却发现进程莫名奇妙的死掉,即使已经在所有可能出现异常的地方都比较注意,然后在合适的地方加上了try except这样的异常处理。但是任何异常信息都没有打印,后来突然发现,有可能是因为仅仅是通过&后台去跑,但是却并没有让该处理进程成为守护进程脱离终端。当终端连接失败或者被使用者忘记这个终端不能关闭的时候,会导致进程被强制退出。

守护进程

守护进程和后台进程不同,不仅是表面上脱离了控制台,而是和整个会话,和进程组脱离了。这样终端的关闭就和该守护进程没有关系了。并且互不影响。

守护进程的要求一般如下:
脱离会话,脱离进程组
改变工作目录
改变权限掩码
关闭输入输出流或者重定向输入输出流
设置信号处理

一个python的守护进程

supervisor

supervisor是python的一个进程管理工具,它包括两个部分:supervisord和supervisorctl。supervisord是一个守护进程,然后supervisorctl是一个客户端控制程序,用来管理被控制程序的开启和关闭。

?

使用方法

安装好后,需要配置/etc/supervisord.conf这样一个配置文件,主要配置程序名,command、logfile、log_stdout之类的。

在终端输入supervisord,supervisord就已经以后台进程运行了,如果配置文件里面配置了程序名和command,并且设置了autostart,那么就会自动执行command

如果需要停止、关闭和重新启动程序,直接supervisorctl start/stop/restart all/program-name

内部原理

supervisord其实是一个python的守护进程,然后内部根据配置文件通过subprocess.Popen模块执行command,并且会开启一个RPC server监听某个端口,而supervisorctl其实就是一个rpc client把一些关闭启动重启的请求发送给supervisord去真正执行。

守护进程和supervisor,布布扣,bubuko.com

守护进程和supervisor

标签:style   http   color   使用   os   strong   文件   数据   

原文地址:http://blog.csdn.net/liupc123123/article/details/38309531

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!