РЕДАКТИРОВАТЬ: По какой-то причине половина моего поста была обрезана, не уверен, что случилось. Я скоро обновлю и опубликую, что это обновлено здесь наверху.
РЕДАКТИРОВАТЬ: я обновил пост снова, извините за неполный вопрос.
РЕДАКТИРОВАТЬ (8:55 вечера EST 10/10/2011): я обновил /srv/rhodecode/start.sh, как предложил Стивен, до сих пор не радует. Он продолжает висеть так:
[lpeabody@vcs rhodecode]$ sudo /etc/init.d/rhodecode-server start
Starting rhodecode-server:
Я обновил сценарии ниже, чтобы показать изменения.
В своей жизни я никогда не писал сценарии оболочки или bash. Я пытаюсь установить RhodeCode на CentOS, и есть сценарии инициализации для Debian и Gentoo, но не для RedHat / CentOS, что для меня безумно. Поэтому мне нужно написать один, потому что наша серверная среда ограничена работой CentOS 5. Исходный код проекта можно найти здесь, в Bitbucket .
Идея состоит в том, чтобы запустить RhodeCode с Celery и RabbitMQ. Все написано на Python, и у меня есть среда в отдельном виртуальном контейнере с использованием virtualenv. У меня есть идея для сценария оболочки здесь .
Я создал системного пользователя с именем rhodecode и создал каталог / var / run / rhodecode, и он принадлежит rhodecode. Я также создал / 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
, я вижу, что paster serve production.ini
команда из /srv/rhodecode/start.sh прошла и работает с идентификатором пользователя 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
Однако pid-файл не создается, поэтому я не могу остановить сервер от моего скрипта инициализации. Я не уверен, почему демон не создает pid-файл. Путь к файлу pid действителен, а права доступа верны. Мысли?
/var/run/rhodecode/pid
Правильно ли разрешение для пользователя, под которым он работает? В этом отношении, эта переменная верна или должна быть/var/run/rhodecode.pid
?sh -x /etc/init.d/rhodecode-server start
?daemon --pidfile
только указывает, где находится файл pid. функции в CentOS, кажется, не имеют требуемой--make-pidfile
опцииОтветы:
Я думаю, что ваша проблема в
/srv/rhodecode/start.sh
. В настоящее время он начинаетсяpaster
как отдельный фоновый процесс, а затем сразу же завершается. Это создает проблему для вашего сценария инициализации, который, как ожидаетсяstart.sh
, будет длительным процессом демона, которым нужно управлять.Таким образом, попробуйте изменить последнюю строку
/srv/rhodecode/start.sh
следующим образом:Использование
exec
маркиstart.sh
сталиpaster
, которая затем daemonized поdaemon
команде в сценарии инициализации.источник
Вы должны указать местоположение? Не могли бы вы использовать опцию --name, чтобы дать ему имя? Это создаст PID для вас и очистит его, когда вы закончите. Так это будет выглядеть так:
источник
--name
или--stop
в Centos 5 либо.