代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Python
】
监控并自动启动已停止的windows服务
作者:
AiboW
/ 发布于
2013/9/13
/
1221
每隔一段时间检测一下服务是否停止,如果停止尝试启动服务。 进行服务停止日志记录
#!/usr/bin/env python #-*- encoding:utf-8 -*- """ 1. 每隔一分钟检测一次服务状态 2. 如果发现服务状态已经停止,那么尝试启动服务 3. 自动记录日志 4. 任务栏图标显示 """ import sys; reload(sys); sys.setdefaultencoding('utf-8'); import win32service; import logging; from logging.handlers import RotatingFileHandler; import os.path; import wx; import AppResource; import webbrowser; from AppXml import *; C_APP_NAME = "Service Moniter 1.0"; C_LOG_DIR = os.path.altsep.join([os.path.curdir,'service.log']); C_CONFIG_PATH = os.path.altsep.join([os.path.curdir,'config.xml']); C_LOG_SIZE = 1048576; C_LOG_FILES = 3; C_APP_SITE = "http://www.du52.com/?app=service_moniter&version=1.0.0"; class ServiceControl(object): def __init__(self): self.scm = win32service.OpenSCManager(None,None,win32service.SC_MANAGER_ALL_ACCESS); # 检查服务是否停止 def isStop(self,name): flag = False; try: handle = win32service.OpenService(self.scm,name,win32service.SC_MANAGER_ALL_ACCESS); if handle: ret = win32service.QueryServiceStatus(handle); flag = ret[1]!=win32service.SERVICE_RUNNING; win32service.CloseServiceHandle(handle); except Exception,e: logging.error(e); return flag; # 开启服务 def start(self,name): try: handle = win32service.OpenService(self.scm,name,win32service.SC_MANAGER_ALL_ACCESS); if handle: win32service.StartService(handle,None); win32service.CloseServiceHandle(handle); except Exception,e: logging.error(e); # 退出 def close(self): try: if self.scm: win32service.CloseServiceHandle(self.scm); except Exception,e: logging.error(e); # 初始化日志 def InitLog(): logging.getLogger().setLevel(logging.ERROR); RtHandler = RotatingFileHandler(filename=C_LOG_DIR,maxBytes=C_LOG_SIZE,backupCount=C_LOG_FILES); RtHandler.setLevel(logging.ERROR); RtHandler.setFormatter(logging.Formatter('[%(asctime)s][%(levelname)s] %(message)s')); logging.getLogger().addHandler(RtHandler); logging.error('监控开始执行'); # 系统托盘图标 class TaskIcon(wx.TaskBarIcon): def __init__(self): wx.TaskBarIcon.__init__(self); self.SetIcon(AppResource.TaskIcon.getIcon(),C_APP_NAME); self.ID_NAME = wx.NewId(); self.ID_EXIT = wx.NewId(); self.ID_AUTHOR = wx.NewId(); self.Bind(wx.EVT_MENU,self.OnExitEvent,id=self.ID_EXIT); self.Bind(wx.EVT_MENU,self.OnHelpEvent,id=self.ID_AUTHOR); def OnHelpEvent(self,event): webbrowser.open_new(C_APP_SITE); def OnExitEvent(self,event): wx.Exit(); def CreatePopupMenu(self,event=None): menu = wx.Menu(); menu.Append(self.ID_NAME,C_APP_NAME); menu.AppendSeparator(); menu.Append(self.ID_AUTHOR,"技术支持"); menu.Append(self.ID_EXIT,"退出"); return menu; # 隐藏窗口 class Frame(wx.Frame): def __init__(self,timelen,services): wx.Frame.__init__(self,parent=None,title=C_APP_NAME); self.timelen = timelen*1000; self.services = services; self.Show(False); self.Bind(wx.EVT_TIMER,self.OnTimerEvent); self.Bind(wx.EVT_CLOSE,self.OnExitEvent); self.timer = wx.Timer(self); self.timer.Start(self.timelen); def OnTimerEvent(self,event): sc = ServiceControl(); for name in self.services: print name; if sc.isStop(name): logging.error('系统检测到服务[%s]停止'%(name,)); sc.start(name); sc.close(); def OnExitEvent(self,event): if self.timer: self.timer.Stop(); self.timer = None; # 进程 class Application(wx.App): def OnInit(self): # 初始化配置 xml = XmlNode(); if not xml.LoadFile(C_CONFIG_PATH): logging.error('配置文件不存在'); return False; timelen = xml.FindNode('time').GetInt(); if timelen<=0: logging.error('监控间隔时间必须大于0秒'); return False; services = xml.FindNode('services').GetChildrenList(tag='item'); if len(services)==0: logging.error('监控服务列表不能为空'); return False; self.taskbar = TaskIcon(); self.frame = Frame(timelen,services); return True; def OnExit(self): logging.error('监控停止执行'); self.frame.Close(); self.taskbar.RemoveIcon(); self.taskbar.Destroy(); if __name__ == '__main__': InitLog(); app = Application(); app.MainLoop();
试试其它关键字
监控windows服务
同语言下
.
比较两个图片的相似度
.
过urllib2获取带有中文参数的url内容
.
不下载获取远程图片的宽度和高度及文件大小
.
通过qrcode库生成二维码
.
通过httplib发送GET和POST请求
.
Django下解决小文件下载
.
遍历windows的所有窗口并输出窗口标题
.
根据窗口标题调用窗口
.
python 抓取搜狗指定公众号
.
pandas读取指定列
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
AiboW
贡献的其它代码
(
2
)
.
格式化日期字符串为unix时间戳
.
监控并自动启动已停止的windows服务
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3