我试图在Ubuntu 12.04上安装RhodeCode服务器。 我把所有东西都安装到了virtualenv中,当我从控制台运行它时,所有东西都能正常工作( paster serve production.ini )。
我写了一个init.d脚本来启动它,但它似乎并没有工作。 当我执行sudo /etc/init.d/rhodecode start手动sudo /etc/init.d/rhodecode start ,我看到“启动RhodeCode”回显到控制台,一切正常。 但是,如果我重新启动,或者如果我使用sudo service rhodecode start ,我确实看到消息呼应到控制台,但Python进程不运行。
我已经使用update-rc.d rhodecode defaults安装了脚本。
从研究如何实现这一点,我发现的源代码提示我不需要运行source /usr/rhode/venv如果我直接从virtualenv目录运行python。 首先成功地从控制台运行而不激活任何virtualenv似乎支持这个理论。 virtualenv页面似乎证实了这一点 :
如果直接从virtualenv的bin /目录(例如path / to / env / bin / pip或/ path / to / env / bin / python script.py)运行脚本或python解释器,则不需要激活。
有关我如何设置服务器的更多细节,这个Gist显示了我迄今为止所做的工作笔记: 在Ubuntu Server 12.04上安装RhodeCode 1.3.6
#!/bin/sh ### BEGIN INIT INFO # Provides: rhodecode # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Starts RhodeCode ### END INIT INFO USER=rhodeuser VENV_DIR=/usr/rhode/venv DATA_DIR=/usr/rhode/data CELERY_ARGS="$VENV_DIR/bin/paster celeryd $DATA_DIR/production.ini" RHODECODE_ARGS="$VENV_DIR/bin/paster serve $DATA_DIR/production.ini" CELERY_PID_FILE=/var/run/celeryd.pid RHODECODE_PID_FILE=/var/run/rhodecode.pid start_celery() { /sbin/start-stop-daemon \ --start \ --background \ --chuid $USER \ --pidfile $CELERY_PID_FILE \ --exec $VENV_DIR/bin/python -- $CELERY_ARGS } start_rhodecode() { /sbin/start-stop-daemon \ --start \ --background \ --chuid $USER \ --pidfile $RHODECODE_PID_FILE \ --exec $VENV_DIR/bin/python -- $RHODECODE_ARGS } stop() { /sbin/start-stop-daemon \ --stop \ --user $USER } case "$1" in start) echo "Starting Celery" start_celery echo "Starting RhodeCode" start_rhodecode ;; stop) echo "Stopping RhodeCode and Celery" stop ;; restart) echo "Stopping RhodeCode and Celery" stop echo "Starting Celery" start_celery echo "Starting RhodeCode" start_rhodecode ;; *) exit 2 ;; esac exit 0
你有没有尝试过提供的init.d脚本 ?
我认为你的脚本中缺less--exec $DAEMON -- $DAEMON_OPTS部分。
我讨厌这种“回答”,但似乎我不得不在某种程度上破坏了安装而没有意识到这一点。 我删除了整个RhodeCode virtualenv,并根据我的笔记重新创build它,现在当我通过service rhodecode start调用它时,init.d脚本正常工作。
我希望我知道我第一次做错了什么。
我相信你所缺less的是加载virtualenv环境的东西。 我遇到了类似于virtualenv的Ruby的RVM遇到的同样的问题。 根据文档,您需要在脚本中使用激活 。
在执行这些命令之前,您需要将source $VENV_DIR/bin/activate到您的脚本中。 当你以自己的用户身份运行它时,你可能已经激活了虚拟环境。