编辑:出于某种原因,我的一半职位被截断,不知道发生了什么事。 我将尽快更新,并会发布在顶部更新。
编辑:我已经更新了这个post,抱歉的不完整的问题。
编辑(下午8:55 EST 10/10/2011):我更新/srv/rhodecode/start.sh像史蒂文build议,仍然没有喜悦。 它继续像这样挂起:
[lpeabody@vcs rhodecode]$ sudo /etc/init.d/rhodecode-server start Starting rhodecode-server:
我已经更新了下面的脚本来显示更改。
我从来没有写过一个shell或一个bash脚本在我的生活中。 我试图在CentOS上安装RhodeCode,Debian和Gentoo有init脚本,但是对于我来说,RedHat / CentOS不是。 所以我需要编写一个,因为我们的服务器环境限于运行CentOS 5.这个项目的源代码可以在Bitbucket中find 。
这个想法是运行RhodeCode w /芹菜和RabbitMQ。 它全部用Python编写,我使用virtualenv在自己独立的虚拟容器中创build环境。 我在这里得到了shell脚本的想法。
我创build了一个名为rhodecode的系统用户,并创build了目录/ var / run / rhodecode,它由rhodecode所有。 我还创build了/ var / www / rhodecode其中production.ini驻留,以及/srv/rhodecode/start.sh,所有这些都是由rhodecode拥有。
权限:
[lpeabody@vcs run]$ ll -a /var/run/rhodecode total 12 drwxr-xr-x 2 rhodecode rhodecode 4096 Oct 10 15:57 . drwxr-xr-x 21 root root 4096 Oct 10 16:07 .. [lpeabody@vcs run]$ ll -a /var/www/rhodecode total 76 drwxr-xr-x 4 rhodecode rhodecode 4096 Oct 10 16:47 . drwxr-xr-x 11 root root 4096 Oct 5 14:54 .. drwxrwxr-x 3 rhodecode rhodecode 4096 Oct 5 19:40 data -rw-r--r-- 1 rhodecode rhodecode 0 Oct 10 16:41 debug.log -rw-r--r-- 1 rhodecode rhodecode 1466 Oct 10 16:41 error.log -rw-rw-r-- 1 rhodecode rhodecode 6000 Oct 6 15:27 production.ini drwxrwxr-x 2 rhodecode rhodecode 4096 Oct 5 18:37 repos -rw-r--r-- 1 rhodecode rhodecode 44032 Oct 5 19:16 rhodecode.db [lpeabody@vcs run]$ ll -a /srv/rhodecode/ total 16 drwxr-xr-x 2 rhodecode rhodecode 4096 Oct 10 16:40 . drwxr-xr-x 4 root root 4096 Oct 7 14:40 .. -rwxr-xr-x 1 rhodecode rhodecode 277 Oct 10 16:40 start.sh
我有以下bash和shell脚本。
/srv/rhodecode/start.sh
#!/bin/bash # run this as the rhodecode user! WDIR=/var/www/rhodecode VIRTUALENV_DIR=/opt/python_virtualenvironments/rhodecode-venv export PYTHON_EGG_CACHE=/tmp/.python-eggs source $VIRTUALENV_DIR/bin/activate cd $WDIR exec paster serve production.ini 1> debug.log 2> error.log
/etc/init.d/rhodecode-server
#!/bin/sh # # rhodecode-server RhodeCode server instance # # # PATH=/sbin:/usr/sbin:/bin:/usr/bin NAME=rhodecode-server DESC=rhodecode-server USER=rhodecode PID_FILE=/var/run/rhodecode/pid CMD=/srv/rhodecode/start.sh LOCK_FILE=/var/lock/subsys/$NAME . /etc/init.d/functions RETVAL=0 remove_pid () { rm -f ${PID_FILE} } start_rhodecode () { daemon --user $USER --pidfile $PID_FILE $CMD RETVAL=$? [ $RETVAL -eq 0 ] && touch $LOCK_FILE return $RETVAL } stop_rhodecode () { killproc -p $PID_FILE RETVAL=&? rm -f $LOCK_FILE rm -f $PID_FILE return $RETVAL } restart_rhodecode () { stop_rhodecode start_rhodecode RETVAL=$? } case "$1" in start) echo -n $"Starting $DESC: " start_rhodecode echo ;; stop) echo -n $"Stopping $DESC: " stop_rhodecode echo ;; restart) echo -n $"Restarting $DESC: " restart_rhodecode echo ;; *) echo $"Usage: $0 {start|stop|restart}" RETVAL=1 ;; esac exit $RETVAL
当我运行sudo /etc/init.d/rhodecode-server start ,然后运行ps -aux | grep paster ps -aux | grep paster ,我可以看到来自/srv/rhodecode/start.sh的paster serve production.ini命令已经通过并且正在使用rhodecode的用户标识(102)运行。
102 5222 0.7 7.8 144300 80988 ? Sl 16:08 0:00 /opt/python_virtualenvironments/rhodecode-venv/bin/python /opt/python_virtualenvironments/rhodecode-venv/bin/paster serve production.ini
但是,没有创buildPID文件,所以我不能停止从我的初始化脚本的服务器。 我不知道为什么守护进程不创buildpidfile。 pid文件的path是有效的,权限是正确的。 思考?
我认为你的问题是在/srv/rhodecode/start.sh 。 目前正在开始paster作为一个单独的后台进程,然后立即退出。 这对于你的初始化脚本来说是一个问题,它希望start.sh本身就是要被pipe理的长期运行的守护进程。
因此,请尝试更改/srv/rhodecode/start.sh的最后一行来读取,如下所示:
exec paster serve production.ini 1> debug.log 2> error.log
使用exec可以使start.sh 成为 paster ,然后通过init脚本中的daemon命令进行daemon 。
你必须指定位置? 你可以使用–name选项给它一个名字? 这将为您创buildPID,并在完成后清理它。 所以它看起来像:
$NAME="rhodecode" start_rhodecode () { daemon --user $USER --name $NAME $CMD RETVAL=$? return $RETVAL } stop_rhodecode () { daemon --name $NAME --stop RETVAL=&? return $RETVAL }