2009-11-27 66 views
4

我有一個簡單的web服務器寫在扭曲,我試圖啓動它與twistd daemonized。一切工作正常reactor.run(),但當我使用twistd -y(作爲根),我的包在直接子目錄中找不到。由於服務器在端口80上運行,因此服務器運行在端口80上。manpage for twistd說:作爲根運行twistd,沒有找到模塊

請注意,如果twistd以root身份運行,則不會搜索Python模塊的工作目錄。

那麼這很好,但爲什麼?我該如何解決?即使我明確設置了該選項,扭曲似乎也忽略了--rundir .

+2

您是否嘗試設置PYTHONPATH變量? http://docs.python.org/using/cmdline.html#envvar-PYTHONPATH – miku 2009-11-27 08:54:42

+1

嗯,我可以像這樣手動調整搜索路徑: import sys sys.path.insert(0,「。」 ) 但這是相當跛腳。 「」應該始終處於搜索路徑中。我想我的問題是,是否沒有人使用_twistd_在知名端口上運行服務? – jpsimons 2009-11-27 09:32:45

+0

不要依靠rundir。請參閱https://twistedmatrix.com/trac/ticket/2572 – digenishjkl 2016-03-21 10:53:25

回答

7

一般的UNIX智慧是,當root是一個壞主意時,在工作目錄中搜索要執行的內容。爭論是,它打開了木馬的大門。在以root身份運行時,爲了不將工作目錄添加到Python模塊導入搜索路徑中,twistd基本上就是要遵循這一智慧。正如另一位評論者所說,你可以自己設置PYTHONPATH來包含你的應用程序需要的代碼的目錄。

您也可以完全跳過以root身份運行,並使用authbind綁定低編號端口而不具有超級用戶權限。這就是我所有服務器的部署方式。

+2

等待,使用authbind我可以在不需要root的端口上運行<1024端口,而且我不需要重新編譯我的內核?這很好,希望我早一點知道。 – jpsimons 2009-11-27 19:13:47