我正在使用 Twisted 教程中的以下脚本(略有修改(:
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 + "rn")
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))
我保存为finger_daemon.tac
并运行
twistd -y finger_daemon.tac
-l /home/me/twisted/finger.log
--pidfile=/home/me/twisted/finger.pid
但当然,它不会绑定到 79,因为它是一个特权端口。我也尝试使用 sudo 跑步,那里没有区别。
然后我尝试将TCPServer
端口更改为 7979,然后在运行时使用
telnet 127.0.0.1 7979
我得到Connection Refused
错误。这到底是怎么回事?守护进程应该如何在扭曲中工作?
当我运行此代码时,我看到以下日志消息:
2013-10-02 23:50:34-0700 [-] failed to set uid/gid 1/1 (are you root?) -- exiting.
然后twistd
退出。 所以你需要做sudo twistd
然后增加了一大堆 python 路径管理问题......
为什么要设置uid
和gid
参数? 您正在尝试以daemon
用户身份运行它? 您无需这样做即可进行守护程序。 只需删除uid=1, gid=1
参数即可Application
使其对我有用。