[python-win32] Pylons as service...
Durumdara
durumdara at gmail.com
Tue May 19 16:53:03 CEST 2009
Dear Tim!
2009/5/18 Tim Roberts <timr at probo.com>
> Durumdara wrote:
> >
> > 1.)
> > I wanna ask something about python services.
> > ...
> > Yesterday I tried to install two of pylons services.
> > Interesting thing I saw.
> >
> > Every of the installed services are have SAME EXE without any
> > information to identify, which pylons site is need to start...
> > I have never seen same thing before, so I don't understand, which
> > information is have PythonService.exe to know which windowsservice.py
> > need to start...
> >
> > Is service name passed to PS.EXE by OS?
>
> Well, yes and no. Remember that the service script initializes itself.
Ok, I know it.
>
> It contains all of the code necessary to register itself with the
> operating system. Part of that registration process involves specifying
> the exact command line that must be run to start the service.
>
> The service NAME isn't important at all. That's only used for filing,
> so to speak. It's the command line that identifies the script to be run.
One thing I don't understand that Image Path is "" (in this machine):
"C:\Python25\lib\site-packages\win32\PythonService.exe"
Only pointer to WindowsService script is:
"PythonClass:default" = "c:\web\pylons\xxx\WindowsService.MyService"
The thing I don't know if PythonService is used by Service system without
any parameters then how to find this exe the PythonClass that need to be
call?
>
>
>
> > I saw that in registry the service is have all data it needed. But how
> > to know this ONE EXE, which service started it, and which *.py can it
> > use to start?
>
> It's all on the command line that gets registered by the service script.
I see the registration in registry/services, but only thing I don't know
that how do know the PS.EXE (calling without any params ) where to look for
PythonClass parameter?
>
>
> The exact same thing is true of any long-running Python scripts. If you
> have 10 different normal Python applications running, as far as the
> operating system is concerned, all 10 of them are called "python.exe"
> (or "pythonw.exe"). If you look in Task Manager, that's exactly what
> you'll see. The personality of the application comes from the script
> that is being run, but that's just a data file that gets passed to the
> interpreter exe.
Yes, but when I start a python file, I see infos in Process Explorer:
Path: C:\Python25\python.exe
Command line: "C:\Python25\python.exe" "c:\d\testdirname.py"
Curr. dir: "C:\D\"
When I check the service, the result is:
Path: C:\Python25\lib\site-packages\win32\PythonService.exe
Commad line:
Cur dir: "c:\web\pylons\xxx\"
>
>
>
> > 2.) The service stopping is not correct:
> >
> > The Python service control handler failed.
> > File "C:\Python25\lib\site-packages\win32\lib\win32serviceutil.py",
> > line 791, in ServiceCtrlHandlerEx
> > self.SvcStop()
> > File "c:\web\pylons\xxx\WindowsService.py", line 91, in SvcStop
> > sys.exit()
> > <type 'exceptions.SystemExit'>: <NULL>
> >
> > If I changed it to sys.exit(0), or (1), I also got this message...
>
> Why do you think this is not correct?
Because I hate if my programs are use Event Log as trash... :-(
> You are only seeing that because
> you are running this application within a command shell, or some other
> environment where you see these log messages. Ordinarily, if this is
> being run as a service in the background, you wouldn't see that message.
Yes.
>
>
> It's true that this is not the normal way to stop a service. You'll see
> in that same Pylons script that they have commented out a call to assert
> the "stop_event" event, which the SvcDoRun function is blocked on.
> That's the normal way. SvcStop sets an event, which allows SvcDoRun to
> return. When SvcDoRun returns, the service exits. However, the
> sys.exit method also works. It's just that you get this little traceback
When I removed the sys.exit(), it is also working without any error log
Event:
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
#win32event.SetEvent(self.stop_event)
self.ReportServiceStatus(win32service.SERVICE_STOPPED)
#sys.exit(1)
Thanks for your help:
dd
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-win32/attachments/20090519/226ffedc/attachment-0001.htm>
More information about the python-win32
mailing list