最近一段时间,公司的网管系统二期优化需要新增功能,实现对网管客户端程序进行保护的监控脚本的自动更新及保护进程的监控告警。网管客户端程序分为两部分:客户端GatherClient及保护进程gatherclient_daemon.py,其中保护脚本由Python编写,主要功能是实现客户端进程崩溃或意外被杀死后的自动恢复。目前网管系统支持Windows和Linux平台。下面主要讲述在Linux下实现遇到的问题。为了实现上述的两功能,需要解决以下两方面问题:1、获取保护脚本进程是否存在。对Python脚本保护进程的实时监控 ,需要获取当前系统的进程信息,以判定该进程是否存活。由于py脚本均是由Python二进制模块以参数的形式加载并产生进程 ,而在系统中的进程名均为python,这样若系统存在其他py脚本在运行,则无法区分,不过这个问题可能通过获取进程的参数信息来区分所对应的py脚本(Windows和Linux均可获取进程参数信息),此处不细述。2、py脚本的自动更新及加载。当网管系统服务端有脚本gatherclient_daemon.py的更新时,需要客户端程序能够自动下载脚本,并完成对更新后的py脚本的加载启动。而我们的客户端由于公司各游戏业务的服务器物理上分布很分散,均为远程操作,当客户端程序有版本更新时,会自动下载新程序文件,然后客户端自动退出,由保护进程gatherclient_daemon.py负责启动更新后的客户端进程,因此优先更新py文件并保证正常重新启动对GatherClient的自动更新功能显得尤为关键。Linux下启动一个新进程的方法有:调用fork( ),system( )以启动子进程的方式实现,其中system( )的系统内部实现也是调用fork( )及Waitpid等。这里就涉及到Linux下的父子进程产生及资源的继承关系的问题。关于fork( )产生子进程的理解,可看下面一段示例及解析:
Gloobus 文件快速预览已支持 Nautilus 3.2Ubuntu中安装网络电视SopCast相关资讯 Linux平台
- 停止那些无聊的预测吧!Linux已经 (08/03/2014 09:37:01)
- Linux平台存储架构与应用方案研究 (04/30/2013 07:03:08)
- Linux平台用C++实现事件对象,同步 (12/18/2011 19:52:29)
| - Linux 平台七大桌面环境通览 (06/25/2014 12:32:36)
- 卡马克认为Linux仍然不是一个商业 (08/06/2012 06:49:31)
- Linux平台上用C++实现多线程互斥锁 (12/18/2011 19:46:15)
|
本文评论 查看全部评论 (0)