1

我正在使用 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.

下面是我的运行脚本。

#!/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 命令用被调用的命令替换当前进程(你的脚本),除非被调用的命令失败,否则它不会返回。因此,无论如何“执行”导出是没有意义的。它们也可以折叠成一行。所以,你的脚本应该看起来更像这样:

#!/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 回答