EDITAR: Por alguna razón, la mitad de mi publicación se truncó, no estoy seguro de lo que sucedió. Actualizaré pronto y publicaré que se actualiza aquí en la parte superior.
EDITAR: He actualizado la publicación nuevamente, perdón por la pregunta incompleta.
EDITAR (8:55 PM EST 10/10/2011): Actualicé /srv/rhodecode/start.sh como sugirió Steven, todavía no hay alegría. Sigue colgando así:
[lpeabody@vcs rhodecode]$ sudo /etc/init.d/rhodecode-server start
Starting rhodecode-server:
He actualizado los scripts a continuación para mostrar los cambios.
Nunca he escrito un guión de shell o bash en mi vida. Estoy tratando de instalar RhodeCode en CentOS, y hay scripts de inicio para Debian y Gentoo, pero no para RedHat / CentOS, que es una locura para mí. Entonces necesito escribir uno porque nuestro entorno de servidor está restringido a ejecutar CentOS 5. La fuente del proyecto se puede encontrar en Bitbucket aquí .
La idea es ejecutar RhodeCode con Celery y RabbitMQ. Todo está escrito en Python y tengo el entorno en su propio contenedor virtual separado usando virtualenv. Tengo la idea para el script de shell aquí .
Creé un usuario del sistema llamado rhodecode y creé el directorio / var / run / rhodecode y es propiedad de rhodecode. También he creado / var / www / rhodecode donde reside la producción.ini, así como /srv/rhodecode/start.sh, todo lo cual es propiedad de rhodecode.
Permisos:
[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
Tengo los siguientes scripts de bash y 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
Cuando ejecuto sudo /etc/init.d/rhodecode-server start
y luego ejecuto ps -aux | grep paster
, puedo ver que el paster serve production.ini
comando de /srv/rhodecode/start.sh se ejecutó y se está ejecutando con la identificación de usuario de 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
Sin embargo, no se crea ningún archivo pid, por lo que no puedo detener el servidor desde mi script de inicio. No estoy seguro de por qué Daemon no está creando el archivo pid. La ruta al archivo pid es válida y los permisos son correctos. Pensamientos?
/var/run/rhodecode/pid
correcto el permiso para el usuario con el que se está ejecutando? Para el caso, ¿es correcta esa variable o debería serla/var/run/rhodecode.pid
?sh -x /etc/init.d/rhodecode-server start
?daemon --pidfile
solo especifica dónde está el archivo pid. funciones en CentOS no parece tener la--make-pidfile
opción requeridaRespuestas:
Creo que tu problema está en
/srv/rhodecode/start.sh
. Actualmente está comenzandopaster
como un proceso de fondo separado y luego saliendo inmediatamente. Esto plantea un problema para su script de inicio, que esperastart.sh
ser el proceso de demonio de larga ejecución que se administrará.Por lo tanto, intente cambiar la última línea de
/srv/rhodecode/start.sh
leer de la siguiente manera:Uso de
exec
las marcasstart.sh
se conviertenpaster
, que luego se endemoniada por eldaemon
comando en el script de inicio.fuente
¿Tienes que especificar la ubicación? ¿Podrías usar la opción --name para darle un nombre? Eso creará el PID para usted y lo limpiará cuando haya terminado. Entonces se vería así:
fuente
--name
o--stop
en Centos 5 tampoco.