[Twisted-Python] Windows NT Service Problem
Werner Thie
wthie at thiengineering.ch
Fri May 18 03:31:01 EDT 2007
May I chime in with a question:
Is there a decent way to redirect twisted logging to the system/app log
facilities of MSW?
Thxs, Werner Thie
Lucas Taylor wrote:
> Berkstresser, Dan wrote:
>> Hello, I am trying to get my twisted project to run as a Windows
>> Service. I have followed the instructions here:
>> http://gradstein.info/DeployingTwistedWindows
>> as well as here:
>> http://svn.twistedmatrix.com/cvs/sandbox/moonfallen/?rev=18080#dirlist
>
>
> This isn't really relevant to the references you've mentioned, but there
> is a simple way to create Windows services with a minor amount of code
> and it's not too onerous. You don't have to use py2exe, although it is
> certainly possible to do so once you've got the rest working. I'm not
> sure if this is the "best" way, but it has been successful for me in a
> couple of projects over the past 2 years.
>
> Below is a very simple example using the QOTD server from the core docs.
> It doesn't use tac files, Application objects, or twistd, so it's very
> basic. A "real" project will differ, but the basic mechanics of starting
> and stopping the service are illustrated in the SvcDoRun() and
> CheckForQuit() methods of the WindowsService object. The idea is to have
> the reactor check for a Stop event periodically and exit if it is raised.
>
> You should be able to install and remove it thusly:
> python qotdservice.py install
> python qotdservice.py remove
>
> You can then test it out with the sample Echo client from the core docs.
>
> """qotdservice.py
> Sample Twisted Windows Service
> """
>
> # Service Utilities
> import win32serviceutil
> import win32service
> import win32event
>
> # Twisted imports
> from twisted.internet.protocol import Protocol, Factory
> from twisted.internet import reactor
>
> class QOTD(Protocol):
>
> def connectionMade(self):
> self.transport.write("An apple a day keeps the doctor away\r\n")
> self.transport.loseConnection()
>
>
> class WindowsService(win32serviceutil.ServiceFramework):
> _svc_name_ = "TwistedWin32Service"
> _svc_display_name_ = "Twisted Win32 Service"
>
> def __init__(self, args):
> win32serviceutil.ServiceFramework.__init__(self, args)
> self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
>
> def SvcStop(self):
> self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
> win32event.SetEvent(self.hWaitStop)
>
> def SvcDoRun(self):
> import servicemanager
>
> self.CheckForQuit()
>
> factory = Factory()
> factory.protocol = QOTD
>
> reactor.listenTCP(8007, factory)
> reactor.run(installSignalHandlers=0)
>
>
> def CheckForQuit(self):
> retval = win32event.WaitForSingleObject(self.hWaitStop, 10)
> if not retval == win32event.WAIT_TIMEOUT:
> # Received Quit from Win32
> reactor.stop()
>
> reactor.callLater(1.0, self.CheckForQuit)
>
> if __name__=='__main__':
> win32serviceutil.HandleCommandLine(WindowsService)
>
>
>
>
> _______________________________________________
> Twisted-Python mailing list
> Twisted-Python at twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
More information about the Twisted-Python
mailing list