Python as Windows Service

Arulnambi Nandagoban a.nandagoban at traxens.com
Wed Sep 24 10:49:21 EDT 2014


De : Gmail [mailto:mrjean1 at gmail.com] 
Envoyé : Wednesday, September 24, 2014 2:41 PM
À : Arulnambi Nandagoban
Objet : Re: Python as Windows Service

 

Also, this may work for you

 

<http://nssm.cc/description>

<http://nssm.cc/usage>

 

NSSM installs an existing app as a service.


/Jean

 


On Sep 24, 2014, at 3:16 AM, "Arulnambi Nandagoban" <a.nandagoban at traxens.com> wrote:

De : MrJean1 [mailto:mrjean1 at gmail.com] 
Envoyé : Tuesday, September 23, 2014 5:55 PM
À : a.nandagoban at traxens.com
Objet : Python as Windows Service

 

Here's one, simple example

 

<http://stackoverflow.com/questions/32404/is-it-possible-to-run-a-python-script-as-a-service-in-windows-if-possible-how>

There are more, just search for "Python Windows Service" for example.


/Jean

 

 

Thank you !!! 

 

--

Nambi

 

 

Thank you again !!!

 

I managed to run the server as as service with help of sample code provided in <http://stackoverflow.com/questions/32404/is-it-possible-to-run-a-python-script-as-a-service-in-windows-if-possible-how .

I found some problem in stopping the service.  I feel it because of socket.accept() which blocks. This the class where I implemented the server in the main method.

 

 

class TraxServerSvc (win32serviceutil.ServiceFramework):

                _svc_name_ = "Testserver"

                _svc_display_name_ = "Pytestserver"

 

                def __init__(self,args):

                                win32serviceutil.ServiceFramework.__init__(self,args)

                                self.hWaitStop = win32event.CreateEvent(None,0,0,None)

                                self.sloop = True

                                self.serversock = 0

 

                def SvcStop(self):

                                self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)           

                                win32event.SetEvent(self.hWaitStop)

                                self.sloop = False

 

                def SvcDoRun(self):

                                servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, servicemanager.PYS_SERVICE_STARTED, (self._svc_name_,''))

                                self.main()

                                

                def main(self):

                                self.serversock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

                                self.serversock.bind(server_config())

                                self.serversock.listen(5)                               

                                while (win32event.WaitForSingleObject(self.hWaitStop, 0) == 258):                                        

                                                try:

                                                                clientsock, addr = self.serversock.accept()

                                                                Pysconfig.logger.info('...connected from: %s', addr) # logging

                                                                thread.start_new_thread(handler, (clientsock, addr))

                                                                Pysconfig.logger.info('Thread ID: %s', thread.get_ident()) # logging                                  

                                                except socket.error, msg:

                                                                Pysconfig.logger.info('Failed to create socket. Error code: ' + str(msg[0]) + ' , Error message : ' + msg[1])

                                                                pass

                                self.serversock.shutdown(socket.SHUT_RDWR)

                                self.serversock.close()

                                servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, servicemanager.PYS_SERVICE_STOPPED, (self._svc_name_,''))

 

if __name__ == '__main__':

                win32serviceutil.HandleCommandLine(TraxServerSvc)

 

When win32event.WaitForSingleObject(self.hWaitStop, 0) method returns zero , I need to quit the while loop to stop the service. But in the above case, since it blocks in accept , I need to make connection from client to completely stop service. 

 

--

nambi

 

 

 

 

 

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20140924/d728fc68/attachment.html>


More information about the Python-list mailing list