如何在使用runit时设置Python路径
我在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不工作呢?为什么它找不到路径?
1 个回答
4
这个脚本看起来有几个潜在的问题。我觉得'export'是不能用'exec'来执行的。至少在我用的bourne版本中是这样。'exec'命令会把当前的进程(也就是你的脚本)替换成被调用的命令,除非被调用的命令失败,否则不会返回。所以,把'export'用'exec'来执行是没有意义的。另外,这些命令可以合并成一行。所以,你的脚本应该更像这样:
#!/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