标签:style http color 使用 os strong 文件 数据
接触守护进程已经很久了,但是在工作中有时候却经常忘记它。这次是在需要后台跑一个十几万的数据处理工作,耗时较长的时候,习以为常的通过&将脚本放到后台去执行,将标准输出和错误输出重定向到日志文件。然后干其他的事情,却发现进程莫名奇妙的死掉,即使已经在所有可能出现异常的地方都比较注意,然后在合适的地方加上了try except这样的异常处理。但是任何异常信息都没有打印,后来突然发现,有可能是因为仅仅是通过&后台去跑,但是却并没有让该处理进程成为守护进程脱离终端。当终端连接失败或者被使用者忘记这个终端不能关闭的时候,会导致进程被强制退出。
守护进程和后台进程不同,不仅是表面上脱离了控制台,而是和整个会话,和进程组脱离了。这样终端的关闭就和该守护进程没有关系了。并且互不影响。
守护进程的要求一般如下:
脱离会话,脱离进程组
改变工作目录
改变权限掩码
关闭输入输出流或者重定向输入输出流
设置信号处理
一个python的守护进程
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
标签:style http color 使用 os strong 文件 数据
原文地址:http://blog.csdn.net/liupc123123/article/details/38309531