原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://world77.blog.51cto.com/414605/782935

最近比较烦,研发给的pc服务版本在虚拟机上已经开始给客户使用了,服务老是莫名的死翘翘,客户不停的电话给我,搞的我心情很差,于是在一个下午,静下心来,用python写了个简单的监控进程的脚本,当发现进程消失的时候,立即调用服务,开启服务。。。

脚本的工作原理是这样的:脚本读取配置文件,读取预先配置好的调用系统服务的路径和所要监控的服务在进程管理器中的进程名,之所以要用配置文件,是为了方便给需要的朋友,你只需要修改进程名和系统路径,源代码就不需要修改了。具体的看代码中的注释吧。。。下面的是配置文件 config.ini

[MonitorProgramPath]
ProgramPath: C:\Program Files\SSH Communications Security\SSH Secure Shell\SshClient.exe [MonitorProcessName]
ProcessName: SshClient.exe

上面可以根据你的需求配置不同的路径和进程名,我是需要监控SshClient.exe 这个程序,那就配置好他的调用的系统路径和他在任务管理器里面的进程名。

下面来看看代码:

#-*- encoding: utf-8 -*-
import logging
import wmi
import os
import time
from ConfigParser import ConfigParser
CONFIGFILE = 'config.ini'
config = ConfigParser()
config.read(CONFIGFILE)
ProgramPath = config.get('MonitorProgramPath','ProgramPath')
ProcessName = config.get('MonitorProcessName','ProcessName')
#读取配置文件中的进程名和系统路径,这2个参数都可以在配置文件中修改
ProList = []
#定义一个列表
c = wmi.WMI() def main():
for process in c.Win32_Process():
ProList.append(str(process.Name))
#把所有任务管理器中的进程名添加到列表 if ProcessName in ProList:
#判断进程名是否在列表中,如果是True,则所监控的服务正在 运行状态,
#打印服务正常运行
print ''
print "Server is running..."
print ''
else:
#如果进程名不在列表中,即监控的服务挂了,则在log文件下记录日志
#日志文件名是以年月日为文件名 f=open('.\\log\\'+time.strftime("%Y%m%d", time.localtime())+'-exception.txt','a')
print 'Server is not running,Begining to Restart Server...'
#打印服务状态
f.write('\n'+'Server is not running,Begining to Restart Server...'+'\n')
f.write(time.strftime('%Y-%m-%d %H:%M:%S --%A--%c', time.localtime()) +'\n')
#写入时间和服务状态到日志文件中
os.startfile(ProgramPath)
#调用服务重启
f.write('Restart Server Success...'+'\n')
f.write(time.strftime('%Y-%m-%d %H:%M:%S --%A--%c', time.localtime()))
f.close()
#关闭文件
print 'Restart Server Success...'
print time.strftime('%Y-%m-%d %H:%M:%S --%A--%c', time.localtime())
del ProList[:]
#清空列表,否则列表会不停的添加进程名,会占用系统资源 if __name__=="__main__" :
while True:
main()
time.sleep(10)
#每隔10秒调用脚本看下服务是否正常,如果不正常则重启服务,如果正常,则打印服务正常

呵呵,脚本还是很简单的,需要的朋友可以拿去玩玩,只要修改配置文件就可以了,不需要修改源代码,就能拿去跑跑,希望对大家的工作和学习有帮助,如果在使用中有问题,可以给我建议。。。

本文出自 “你是路人甲还是霍元甲” 博客,请务必保留此出处http://world77.blog.51cto.com/414605/782935

用python监控您的window服务的更多相关文章

  1. python os.startfile python实现双击运行程序 python监控windows程序 监控进程不在时重新启动

    用python监控您的window服务 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://world77.blog.51cto.co ...

  2. Python 监控nginx服务是否正常

    Python 监控nginx服务是否正常 #!/usr/bin/env python import os, sys, time from time import strftime while True ...

  3. C#编写window服务,一步一步(1)

    Window服务是啥,这里就不废话了,如何用在哪里用也不废话了,这里我这篇文章只是详述了我在vs2012中创建window服务的经过,希望对你有所帮助. 另外:我在编写服务过程中参考了 Profess ...

  4. Python监控网站接口值

    Python监控网站接口值: #!/usr/bin/env python # -*- coding: utf-8 -*- __author__ = 'liudong' import urllib,sy ...

  5. WPF Window 服务安装

    一.安装服务 1.已管理员的身份启动CMD 2.输入 cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 回车 3.输入 InstallUtil.exe ...

  6. Window服务初级教程以及log4net配置文件初始化

    Window服务初级教程:http://www.jb51.net/article/48987.htm 另外,配置log4net这个日志功能的时候需要初始化,不然会报没有初始化的错误,而且初始化的节点应 ...

  7. C# 编写Window服务基础(一)

    一.Windows服务介绍: Windows服务以前被称作NT服务,是一些运行在Windows NT.Windows 2000和Windows XP等操作系统下用户环境以外的程序.在以前,编写Wind ...

  8. C# 编写短信发送Window服务

    我们做项目过程中,一般都会有发送短信的需求.最常见的就是户注册或者登录时发送短信验证码.不同类型的短信发送,我们都可以放到到一张短信表中,然后通过一个定时的作业去执行短信发送.而定时作业的执行,我们就 ...

  9. 自定义Window 服务

    自定义window 服务 开发到使用的流程: 1.完成对应的代码之后(代码在底下),右键MyService.cs 添加安装程序 2.添加window服务安装程序打开Service1.cs[设计]页面, ...

随机推荐

  1. Docker入门系列3:使用

    入门 首先强烈建议玩一遍官方的入门教程,Interactive commandline tutorial,下面是答案: 查看版本:docker version 搜索Image:docker searc ...

  2. JVM内存布局及GC知识回顾

    注:本文篇幅较长,且需要有一定的java基础,建议各位看官,备好瓜子.饮料.小板凳,摆个让自己舒服的姿势,慢慢细看^_^, 文中所有素材,均来自互联网,本人只是详细梳理了一遍,形成此文. 一.JVM运 ...

  3. BeeFramework 系列二 UISignal篇下

    本文转载至 http://www.apkbus.com/android-126129-1-1.html     qihoo2 该用户从未签到 156 主题 156 帖子 1826 积分 Android ...

  4. 九度OJ 1028:继续畅通工程 (最小生成树)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3140 解决:1338 题目描述:     省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有 ...

  5. git merge的本质

    1 git merge [branch] 将[branch]这个分支merge到当前分支. 2 merge的本质 merge就是把branch上的提交合入当前分支的提交树,这两个分支上的所有提交的历史 ...

  6. Android笔记之使用ImageView加载网络图片以及保存图片到本地并更新图库

    ImageView显示网络图片 findViewById(R.id.btnLoad).setOnClickListener(new View.OnClickListener() { @Override ...

  7. BTC、BCH和BSV三者到底有什么区别?

    比特币发展到今天已经有10个年头了,在这十年的发展中,比特币一共经历了两次重要的分裂,现在变成了三种货币,第一种是目前继承了比特币绝大多数遗产的BTC:第二种是BCH:第三种是BSV.那这三种货币到底 ...

  8. log4j 2 入门实例(1)

    本文介绍log4j的基本概念和将日志输出到控制台的例子. 参考文章: http://www.jianshu.com/p/464058bdbc76 http://www.hankcs.com/progr ...

  9. Java基础知识整理之static修饰属性

    static 关键字,我们在开发用的还是比较多的.在<Java编程思想>有下面一段话 static 方法就是没有 this 的方法.在 static 方法内部不能调用非静态方法,反过来是可 ...

  10. CDH版本Hbase二级索引方案Solr key value index

    概述 在Hbase中,表的RowKey 按照字典排序, Region按照RowKey设置split point进行shard,通过这种方式实现的全局.分布式索引. 成为了其成功的最大的砝码. 然而单一 ...