1

Ubuntu 12.04 でプロセスを管理するために runit を使用しています。実行すると、ログに次のエラーが表示されます。

sv up test/

Pythonパスの問題だと思います。

ImportError: No module named htcommon.ht_redis
Traceback (most recent call last):
  File "/home/ubuntu/workspace/htFrontEnd/htanalytics/ht_rpc_server.py", line 17, in <module>
    from htpData import HTPItemBase, HTPUserBase
  File "/home/ubuntu/workspace/htFrontEnd/htanalytics/htpData.py", line 9, in <module>
    from htcommon.ht_redis import HTRedisConnection
ImportError: No module named htcommon.ht_redis]

パスも設定し/etc/environment、 にも設定しました.bashrc

以下は私のrunitスクリプトです。

#!/bin/sh
exec 2>&1
exec export PYTHONPATH=$PYTHONPATH:/home/ubuntu/workspace/htFrontEnd/heythat
exec export PYTHONPATH=$PYTHONPATH:/home/ubuntu/workspace/htFrontEnd/heythat/htanalytics
exec /usr/bin/python /home/ubuntu/workspace/htFrontEnd/htanalytics/ht_rpc_server.py >> /tmp/ht_rpc_server.log 2>&1
root@aws-rpc-server-east-staging-20130203070552:/etc/sv# 

コマンドラインからプロセスを実行すると、問題は発生せず、機能します。

/usr/bin/python /home/ubuntu/workspace/htFrontEnd/heythat/htanalytics/ht_rpc_server.py

runit が機能しないのはなぜですか? パスが見つからないのはなぜですか?

4

1 に答える 1

3

このスクリプトにはいくつかの潜在的な問題があるようです。「エクスポート」を「実行」できるとは思いません。少なくとも、私のバージョンの bourne では失敗します。exec コマンドは、現在のプロセス (スクリプト) を呼び出されたコマンドに置き換え、呼び出されたコマンドが失敗しない限り戻りません。したがって、とにかくエクスポートを「実行」しても意味がありません。また、1 行に折りたたむこともできます。したがって、スクリプトは次のようになります。

#!/bin/sh
export PYTHONPATH=$PYTHONPATH:/home/ubuntu/workspace/htFrontEnd/heythat:/home/ubuntu/workspace/htFrontEnd/heythat/htanalytics
exec /usr/bin/python /home/ubuntu/workspace/htFrontEnd/htanalytics/ht_rpc_server.py >> /tmp/ht_rpc_server.log 2>&1
于 2013-02-03T22:57:15.387 に答える