Python сервис под Windows

pilot

Хочется чтоб программа заработала как сервис под виндовс.
ставится питон.
копируем pythonservice.exe и pywintypes24.dll к python24.dll — в корневую папку питона
регистрируем: pythonservice.exe /register
ставим: python.exe \path-to\simplesrv.py install
сервис установился и запускается.
И не работает.
В режиме DEBUG: pythonservice.exe -debug simplesrv — все работает.
В чем разница между режимами? Питон в системе не один, сервис ставил неустановленным распакованным. и запускал тоже им же оба раза.
Соответственно всех DLL не одна копия. Сервис от имени системы запускается, дебаг — от пользователя.
Это на что-нибудь влияет?

danilov

А ты значение каких-нибудь выражениейсмотришь (в дебаге)?
Если да, то он их вычисляет. То есть если там резалт какой-то твоей функции,
то её результат вычисляется и если она меняет какие-то данные, например, счётчик вызовов,
то дебаг вовсе не равно простому запуску. Плюс наверняка (я не знаю) дебаг переопределяет
stdin и stderr - такая проблема у тебя уже когда-то была.

pilot

Плюс наверняка (я не знаю) дебаг переопределяет
stdin и stderr - такая проблема у тебя уже когда-то была.
фиг с ним. прога живет вполне, сервер отвечает на запросы и тп. куда его stdout и stderr деваются я так и не нашел, но проверил что падает сильно позже того как начинает в них писать. падает по Exception
я даже знаю место: он делает subprocess.Popen(...).
в режиме "не сервиса" и в режиме "сервиса с дебагом" работает. дело скорее всего в окружении, но я не знаю что с окружением происходит.

pilot

Книжка Python Programming on Win32 от разработчиков модулей — тоже не в курсе.

psm-home

я даже знаю место: он делает subprocess.Popen

А сообщение об ошибке показать можешь?

pilot

Прошу прощения за предыдущее сумбурное объяснение, вот тест:
 
import win32serviceutil
import win32service
import win32event
import win32evtlogutil as w32elu
import win32evtlog

import subprocess

class ServiceTest(win32serviceutil.ServiceFramework):
_svc_name_ = "servicetest"
_svc_display_name_ = "Popen test"
def __init__(self,args):
win32serviceutil.ServiceFramework.__init__(self,args)
self.hWaitStop = win32event.CreateEvent(None,0,0,None)

def SvcStop(self):
win32event.SetEvent(self.hWaitStop)

def SvcDoRun(self):
import servicemanager

servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STARTED,
(self._svc_name_, ''
ARX = "C:\fvv\arx.exe"
document = "C:\fvv\document1_1.auto"
ARX_CONF = "C:\fvv\arx.conf"

w32elu.ReportEvent(self._svc_name_,1234,0,win32evtlog.EVENTLOG_ERROR_TYPE,
['ping0: ARX:%s, document:%s, ARX_CONF:%s'%(ARX,document,ARX_CONF)])
w32elu.ReportEvent(self._svc_name_,1234,0,win32evtlog.EVENTLOG_ERROR_TYPE,['ping1'])
arx=subprocess.Popen([ARX,'-n',document,ARX_CONF], stdout=subprocess.PIPE)
w32elu.ReportEvent(self._svc_name_,1234,0,win32evtlog.EVENTLOG_ERROR_TYPE,['ping2'])


win32event.WaitForSingleObject(self.hWaitStop,win32event.INFINITE)
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STOPPED,
(self._svc_name_, ''

if __name__=="__main__":
win32serviceutil.HandleCommandLine(ServiceTest)

Вот trace:
 
 The instance's SvcRun method failed 
File "C:\fvv\Python2.4\lib\site-packages\win32\lib\win32serviceutil.py", line 742, in SvcRun
self.SvcDoRun
File "C:\fvv\Python2.4\servtest.py", line 31, in SvcDoRun
arx=subprocess.Popen([ARX,'-n',document,ARX_CONF], stdout=subprocess.PIPE)
File "C:\fvv\Python2.4\lib\subprocess.py", line 533, in __init__
(p2cread, p2cwrite,
File "C:\fvv\Python2.4\lib\subprocess.py", line 593, in _get_handles
p2cread = self._make_inheritable(p2cread)
File "C:\fvv\Python2.4\lib\subprocess.py", line 634, in _make_inheritable
DUPLICATE_SAME_ACCESS)
exceptions.TypeError: an integer is required

Ушел гуглить и копать исходники.

pilot

Ушел гуглить и копать исходники.
http://sourceforge.net/tracker/index.php?func=detail&aid...

gopnik1994

у сервисов довольно кастрированные права...
попробуй запуск сервера от своего логина, и разрешив доступ к десктопу.
может в этом проблема...

Dasar

сервис запускается из под логина LocalService или из под LocalSystem?
Оставить комментарий
Имя или ник:
Комментарий: