4

Twisted で書かれた単純な Web サーバーがあり、それをtwistdでデーモン化して起動しようとしています。すべて正常に動作しますreactor.run()が、(ルートとして)使用するtwistd -yと、直接の子ディレクトリにあるパッケージが見つかりません。サーバーはポート 80 で実行されているため、root として twistd を実行しています。twistd のマンページには次のように書かれています。

twistd が root として実行されている場合、作業ディレクトリで Python モジュールが検索されないことに注意してください。

それは素晴らしいことですが、なぜですか?どうすれば回避できますか?--rundir .そのオプションを明示的に設定しても、twistdは無視しているようです。

4

1 に答える 1

7

一般的な UNIX の知恵は、ルート時に実行するものを作業ディレクトリで検索することは悪い考えです。トロイの木馬への扉を開くという議論があります。root として実行しているときに Python モジュール インポートの検索パスに作業ディレクトリを追加するという面倒なことはせずに、twistd は基本的にこの知恵に従おうとしています。

別のコメンターが言ったように、PYTHONPATH を自分で明示的に設定して、アプリに必要なコードを含むディレクトリを含めることができます。

また、root としての実行を完全にスキップして、authbindスーパーユーザー権限を持たずに番号の小さいポートをバインドするために使用することもできます。これは、すべてのサーバーが展開されている方法です。

于 2009-11-27T18:14:54.577 に答える