如何在使用runit时设置python路径

时间:2013-02-03 07:59:17

标签: python ubuntu environment-variables daemon

我正在使用runit来管理Ubuntu 12.04上的进程。我运行时在日志中收到以下错误:

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 个答案:

答案 0 :(得分:3)

看起来这个脚本有一些潜在的问题。我不认为“出口”可以“执行”。至少,它在我的bourne版本中失败了。 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