[Twisted-Python] how to stop a service

Manlio Perillo manlio_perillo at libero.it
Sun Jun 11 02:43:38 MDT 2006


Manlio Perillo ha scritto:
> Jean-Paul Calderone ha scritto:
>> [...]
>>> Just another question: when running application with twistd, how can I
>>> return error codes from my application to operating system?
>>>
>>> That is: where (and how) can I safely call os.exit?
>>>
>> There's no support for this yet.
>>
> 
> What about storing the return code in the application instance and call
> os.exit(application.retcode) in an after shutdown system event?
> 

Maybe a better place is inside the reactor:

In twisted.internet.base

# IReactorCore

    def stop(self, exitStatus=0):
        """See twisted.internet.interfaces.IReactorCore.stop.
        """
        if not self.running:
            raise RuntimeError, "can't stop reactor that isn't running"
        self.exitStatus = exitStatus
        self.fireSystemEvent("shutdown")

    def crash(self):
        """See twisted.internet.interfaces.IReactorCore.crash.
        """
        self.exitStatus = ???
        self.running = 0

    def sigInt(self, *args):
        """Handle a SIGINT interrupt.
        """
        log.msg("Received SIGINT, shutting down.")
        self.callFromThread(self.stop, SIGINT)

    def sigBreak(self, *args):
        """Handle a SIGBREAK interrupt.
        """
        log.msg("Received SIGBREAK, shutting down.")
        self.callFromThread(self.stop, SIGBREAK)

    def sigTerm(self, *args):
        """Handle a SIGTERM interrupt.
        """
        log.msg("Received SIGTERM, shutting down.")
        self.callFromThread(self.stop, SIGTERM)



In twisted.scripts.twistd:

def runApp(config):
   ...

   log.msg("Server Shut Down.")

   from twisted.internet import reactor
   os.exit(reactor.exitStatus)




Regards  Manlio Perillo




More information about the Twisted-Python mailing list