Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 4, 2012 15:12:52

legi0ner
От: Чебоксары
Зарегистрирован: 2012-05-15
Сообщения: 40
Репутация: +  0  -
Профиль   Отправить e-mail  

python ms windows service

есть необходимость запускать определенный скрипт через поределенное время на 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. а когда работает сервис этого не происходит. не пониаю в чем дело

Отредактировано legi0ner (Дек. 4, 2012 15:18:35)

Офлайн

#2 Дек. 4, 2012 18:54:05

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

python ms windows service

А сама служба работает? Попробуйте указать полный путь до лога, кто знает какая там используется рабочая директория при запуске сервиса. Если поможет, есть варианты указывать расположение лог файла относительно главного скрипта.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version