zoukankan      html  css  js  c++  java
  • python os.startfile python实现双击运行程序 python监控windows程序 监控进程不在时重新启动

    用python监控您的window服务

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

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

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

    复制代码
    [MonitorProgramPath] 
    ProgramPath: C:Program FilesSSH Communications SecuritySSH Secure ShellSshClient.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('
    '+'Server is not running,Begining to Restart Server...'+'
    ') 
            f.write(time.strftime('%Y-%m-%d %H:%M:%S --%A--%c', time.localtime()) +'
    ')
     #写入时间和服务状态到日志文件中
            os.startfile(ProgramPath) 
    #调用服务重启
            f.write('Restart Server Success...'+'
    ') 
            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秒调用脚本看下服务是否正常,如果不正常则重启服务,如果正常,则打印服务正常
    复制代码

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

  • 相关阅读:
    WEBAPP开发技巧(手机网站开发注意事项)
    2014阿里前端线上笔试题
    [NOIp2008] 双栈排序 (二分图染色 + 贪心)
    [NOIp2012] 国王游戏(排序 + 贪心 + 高精度)
    关于错排公式以及扩展的一些小结论
    [NOI2009]诗人小G(dp + 决策单调性优化)
    Codeforces Round #429 (Div. 1) C. On the Bench(dp + 组合数)
    Educational Codeforces Round 33 (Rated for Div. 2) F. Subtree Minimum Query(主席树合并)
    Codeforces Round #511 (Div. 1) C. Region Separation(dp + 数论)
    Codeforces Round #471 (Div. 2) F. Heaps(dp)
  • 原文地址:https://www.cnblogs.com/ruiy/p/7126726.html
Copyright © 2011-2022 走看看