ツイストをルートとして実行していますが、モジュールが見つかりません
質問
Twistedで書かれたシンプルなWebサーバーがあり、 twistd でデーモン化して起動しようとしています。すべてが reactor.run()
で正常に動作しますが、 twistd -y
を使用すると、直接の子ディレクトリにあるパッケージが見つかりません。サーバーがポート80で実行されているため、rootとしてtwistdを実行しています。 twistdのマンページのコメント:
twistdがルートとして実行される場合、作業ディレクトリではPythonモジュールが検索されないことに注意してください。
それは素晴らしいですが、なぜですか?そして、どうすれば回避できますか? twistdは、オプションを明示的に設定しても、-rundir。
を無視しているようです。
解決
一般的なUNIXの知恵は、rootが悪い考えであるときに実行するものを作業ディレクトリで検索することです。議論は、トロイの木馬への扉を開くということです。 rootとして実行しているときにPythonモジュールのインポート検索パスに作業ディレクトリを追加しないために、twistdは基本的にこの知恵に従っています。
別のコメンターが言ったように、PYTHONPATHを自分で明示的に設定して、アプリに必要なコードを含むディレクトリを含めることができます。
また、rootとしての実行を完全にスキップし、 authbind
を使用して、スーパーユーザー権限なしで小さい番号のポートをバインドすることもできます。これにより、すべてのサーバーがデプロイされます。
所属していません StackOverflow