用python指令碼監控系統服務

來源:互聯網
上載者:User

最近比較煩,研發給的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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.