2013-10-03 4 views
1

J'utilise le script suivant du tutoriel Twisted (avec une légère modification):consolidations démonisation python tordu et le port

from twisted.application import internet, service 
from twisted.internet import reactor, protocol, defer 
from twisted.protocols import basic 
from twisted.web import client 

class FingerProtocol(basic.LineReceiver): 

    def lineReceived(self, user): 
     d = self.factory.getUser(user) 

     def onError(err): 
      return "Internal server error" 
     d.addErrback(onError) 

     def writeResponse(message): 
      self.transport.write(message + "\r\n") 
      self.transport.loseConnection() 
     d.addCallback(writeResponse) 

class FingerFactory(protocol.ServerFactory): 
    protocol = FingerProtocol 

    def __init__(self, prefix): 
     self.prefix = prefix 

    def getUser(self, user): 
     return client.getPage(self.prefix + user) 

application = service.Application('finger', uid=1, gid=1) 
factory = FingerFactory(prefix="http://livejournal.com/~") 
internet.TCPServer(7979, factory).setServiceParent(
    service.IServiceCollection(application)) 

que je sauve comme finger_daemon.tac et courir avec

twistd -y finger_daemon.tac \ 
    -l /home/me/twisted/finger.log \ 
    --pidfile=/home/me/twisted/finger.pid 

mais bien sûr il ne liera pas à 79, puisque c'est un port privilégié. J'ai essayé aussi de courir avec sudo, pas de différence là-bas.

J'ai alors essayé de changer le port TCPServer-7979 puis se connecter au démon une fois en cours d'exécution avec

telnet 127.0.0.1 7979 

et je reçois l'erreur Connection Refused. Que se passe-t-il ici spécifiquement? Comment diemonizing est censé fonctionner dans Twisted?

Répondre

1

Quand je lance ce code, je vois le message du journal suivant:

2013-10-02 23:50:34-0700 [-] failed to set uid/gid 1/1 (are you root?) -- exiting. 

puis twistd sorties. Donc, vous devez faire sudo twistd et puis cela ajoute un tas de problèmes de gestion de chemin python ...

Pourquoi définissez-vous les arguments uid et gid? Vous essayez de l'exécuter en tant qu'utilisateur daemon? Vous n'avez pas besoin de faire cela pour démoniser. Le simple fait de supprimer les arguments uid=1, gid=1 à Application fait que cela fonctionne pour moi.

+0

génial qui fait l'affaire! Je me demande pourquoi c'est dans leur tutoriel officiel ... – lollercoaster

+0

aussi important - comment avez-vous vu l'erreur? twistd fonctionne silencieusement pour moi – lollercoaster

+1

Je travaille sur Twisted, donc un lien direct vers le tutoriel qui mentionne cet exemple serait utile :-). – Glyph