編集:どういうわけか、私の投稿の半分が切り捨てられました。私はすぐに更新し、ここで更新されたことを上部に投稿します。
編集:不完全な質問で申し訳ありませんが、投稿を再度更新しました。
編集(8:55 PM EST 10/10/2011):Stevenが提案したように/srv/rhodecode/start.shを更新しましたが、まだ喜びはありません。それはそのようにハングし続けます:
[lpeabody@vcs rhodecode]$ Sudo /etc/init.d/rhodecode-server start
Starting rhodecode-server:
以下のスクリプトを更新して、変更を示しました。
私は自分の人生でシェルやbashスクリプトを書いたことがありません。 CentOSにRhodeCodeをインストールしようとしていますが、DebianとGentoo用のinitスクリプトがありますが、RedHat/CentOS用ではありません。サーバー環境はCentOS 5の実行に限定されているため、作成する必要があります。プロジェクトのソースはBitbucket here にあります。
アイデアは、RelodeCodeをCeleryおよびRabbitMQで実行することです。これはすべてPython=で記述されており、virtualenvを使用した独自の仮想コンテナに環境があります。シェルスクリプトのアイデアは here です。
Rhodecodeという名前のシステムユーザーを作成し、/ var/run/rhodecodeディレクトリを作成しました。これはrhodecodeが所有しています。また、production.iniが常駐する/ var/www/rhodecodeと、rhodecodeが所有する/srv/rhodecode/start.shも作成しました。
権限:
[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
を実行すると、/ srv/rhodecode/start.shからのpaster serve production.ini
コマンドが実行され、rhodecodeのユーザーID(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
ただし、pidファイルは作成されないため、initスクリプトからサーバーを停止できません。デーモンがpidfileを作成しない理由がわかりません。 pidファイルへのパスが有効で、権限が正しい。考え?
問題は/srv/rhodecode/start.sh
にあると思います。現在、別のバックグラウンドプロセスとしてpaster
を開始し、すぐに終了しています。これは、start.sh
自体が管理対象の長期実行デーモンプロセスであると想定するinitスクリプトに問題を引き起こします。
したがって、/srv/rhodecode/start.sh
の最後の行を次のように変更してみてください。
exec paster serve production.ini 1> debug.log 2> error.log
exec
を使用すると、start.sh
becomepaster
になり、initスクリプトのdaemon
コマンドによってデーモン化されます。
場所を指定する必要がありますか? --nameオプションを使用して名前を付けることはできますか?これにより、PIDが作成され、完了時にクリーンアップされます。したがって、次のようになります。
$NAME="rhodecode"
start_rhodecode () {
daemon --user $USER --name $NAME $CMD
RETVAL=$?
return $RETVAL
}
stop_rhodecode () {
daemon --name $NAME --stop
RETVAL=&?
return $RETVAL
}