Найти - Пользователи
Полная версия: python ms windows service
Начало » Python для новичков » python ms windows service
1
legi0ner
есть необходимость запускать определенный скрипт через поределенное время на 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]
проблема в том, что при запуске скрипта main.py все записывается в log.log. а когда работает сервис этого не происходит. не пониаю в чем дело
reclosedev
А сама служба работает? Попробуйте указать полный путь до лога, кто знает какая там используется рабочая директория при запуске сервиса. Если поможет, есть варианты указывать расположение лог файла относительно главного скрипта.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB