我正在使用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不起作用?为什么找不到路径?
答案 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