它是一个用来在Windows平台上监控进程执行情况的service程序。因为我需要在Windows下 启动一些服务程序,并且希望如果这些程序出问题可以自动重启。在Linux下有一个很好的 工具是Supervisor,不过它不能用在Windows上,找了半天也没有和这个差不多的,所以就 自已写了一个简化版本,先够自已使用。所以功能和Supervisor比起来是非常简单。
对进程运行监控目前由三部分组成:
- pywatcher.py 主要是实现了Service程序,可以注册到Windows的服务中,本身并不提供 监控进程的功能,它会启动g_server.py程序。提供服务的启动、停止、安装到Service、 从Service中删除等功能。
- g_server.py 提供了类似Supervisor的进程监控功能。进程可以配置在对应的watcher.ini 中。它同时提供Sockek服务,用来处理客户端的请求。
- g_client.py 提供了客户端功能,可以用来显示进程状态、启动、停止及关闭功能。
整个监控在启动时:
- 由pywatcher.py通过subprocess启动g_server.py程序
- 由g_server.py根据watcher.ini启动相应的命令行
- g_server.py会不断查看进程状态,如果有退出的进程,则自动重启
- g_server.py同时接收命令行发过来的命令,根据命令对相应的进程进行控制
- 安装python 2.7版本
- 安装pywin32包
- 安装greenlet 0.4.1包
- 安装gevent 1.0版本(现在只有rc版本)
本软件目前没有做成可安装版本,所以将下载后的代码解压到一个目录下直接运行即可。注意, 在运行前要先配置watcher.ini。
在运行前需要将包中带有的watcher.default.ini拷贝为watcher.ini。然后打开可以看到:
[server]
log_to = 'pywatcher.log'
host = '0.0.0.0'
#g_server port
port = 6001
[program:yourprogram_name]
command = 'command line is here'
directory = 'command starting directory'
#retry times if start program failed, default is 3
startretries = 3
#start program waiting n seconds, default is 1
starting_time = 1
其中server用来定义g_sever.py要使用的信息:
log_to
用来定义输出的日志文件。host
用来定义server绑定的IP,缺省为0.0.0.0
。port
用来定义server绑定的端口,缺省为6001
。
下面是应用程序的定义,需要的话可以仿照这个来定义你自已的应用。分别说明一下:
[program:yourprogram_name]
用来定义应用程序的名字,冒号后面可以是不同的应用,可以通过这个 名字通过client来进行单独的控制。command
用来定义应用程序的执行命令行directory
用来定义应用程序执行时的路径logfile
缺省为 “应用名”.log。表示输出日志文件名。logfile_maxbytes
缺省为50M,单位目前是字节数。用来控制每个日志的大小。logfile_backups
缺省为10个。用来控制日志文件的个数。startretries
启动出错时重试的次数starting_time
等待程序启动时等待的时间
在解压目录下运行:
python pywatcher.py install
这样就将服务进行了安装。
python pywatcher.py start
python pywatcher.py stop
python pywatcher.py remove
服务设置主要是用来控制service的安装、删除与启停。但是本身并不用于更精细的控制。 所以更精细的控制要使用g_client.py来控制。目前提供以下命令:
查看配置的进程运行状态
启动某个应用
停目某个应用
如果使用服务的方式在调试时比较麻烦,可以直接运行 g_server.py,如:
python g_server.py