Форум сайта python.su
0
есть необходимость запускать определенный скрипт через поределенное время на windows машине.
реализовываю с помощью винсервиса.нашел скрипт создания сервиса в интернете. буду вызывать
функцию main.search() каждую минуту.
[code python]# -*- coding: utf-8 -*-
#! /usr/bin/env python
import win32serviceutil
import win32service
import win32event
import servicemanager
import main
class AppServerSvc (win32serviceutil.ServiceFramework):
_svc_name_ = "02"
_svc_display_name_ = "02"
_svc_description_ = "02"
def __init__(self,args):
win32serviceutil.ServiceFramework.__init__(self,args)
self.hWaitStop = win32event.CreateEvent(None,0,0,None)
self.hWaitResume = win32event.CreateEvent(None, 0, 0, None)
self.timeout = 60000 #Пауза между выполнением основного цикла службы в миллисекундах
self.resumeTimeout = 1000
self._paused = False
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STOPPED,
(self._svc_name_, ''))
def SvcPause(self):
self.ReportServiceStatus(win32service.SERVICE_PAUSE_PENDING)
self._paused = True
self.ReportServiceStatus(win32service.SERVICE_PAUSED)
servicemanager.LogInfoMsg("The %s service has paused." % (self._svc_name_, ))
def SvcContinue(self):
self.ReportServiceStatus(win32service.SERVICE_CONTINUE_PENDING)
win32event.SetEvent(self.hWaitResume)
self.ReportServiceStatus(win32service.SERVICE_RUNNING)
servicemanager.LogInfoMsg("The %s service has resumed." % (self._svc_name_, ))
def SvcDoRun(self):
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STARTED,
(self._svc_name_,''))
self.main()
#В этом методе реализовываем нашу службу
def main(self):
#Здесь выполняем необходимые действия при старте службы
servicemanager.LogInfoMsg("start service")
while True:
main.search()
#Проверяем не поступила ли команда завершения работы службы
rc = win32event.WaitForSingleObject(self.hWaitStop, self.timeout)
if rc == win32event.WAIT_OBJECT_0:
#Здесь выполняем необходимые действия при остановке службы
servicemanager.LogInfoMsg("stop service")
break
#Здесь выполняем необходимые действия при приостановке службы
if self._paused:
servicemanager.LogInfoMsg("pause service")
#Приостановка работы службы
while self._paused:
#Проверям не поступила ли команда возобновления работы службы
rc = win32event.WaitForSingleObject(self.hWaitResume, self.resumeTimeout)
if rc == win32event.WAIT_OBJECT_0:
self._paused = False
#Здесь выполняем необходимые действия при возобновлении работы службы
servicemanager.LogInfoMsg("continue work service")
break
if __name__ == '__main__':
win32serviceutil.HandleCommandLine(AppServerSvc)[/code]
[code python]
#-*- coding: utf-8 -*-
import re
import logging
import parselib
logging.basicConfig(format = u'%(filename)s[LINE:%(lineno)d]# %(levelname)-8s [%(asctime)s] %(message)s', level = logging.DEBUG, filename = u'log.log')
def search():
if parselib.search():
logging.debug( u'Yes')
else:
logging.debug( u'No')
if __name__ == "__main__":
search()
[/code]
Отредактировано legi0ner (Дек. 4, 2012 15:18:35)
Офлайн
173
А сама служба работает? Попробуйте указать полный путь до лога, кто знает какая там используется рабочая директория при запуске сервиса. Если поможет, есть варианты указывать расположение лог файла относительно главного скрипта.
Офлайн