EDIT: Untuk beberapa alasan setengah dari posting saya terpotong, tidak yakin apa yang terjadi. Saya akan segera memperbarui dan akan memposting bahwa itu diperbarui di sini di bagian atas.
EDIT: Saya telah memperbarui posting lagi, maaf untuk pertanyaan yang tidak lengkap.
EDIT (20:55 EST 10/10/2011): Saya memperbarui /srv/rhodecode/start.sh seperti yang disarankan Steven, masih belum ada sukacita. Itu terus menggantung seperti:
[lpeabody@vcs rhodecode]$ sudo /etc/init.d/rhodecode-server start
Starting rhodecode-server:
Saya telah memperbarui skrip di bawah ini untuk menunjukkan perubahan.
Saya tidak pernah menulis shell atau skrip bash dalam hidup saya. Saya mencoba menginstal RhodeCode pada CentOS, dan ada skrip init untuk Debian dan Gentoo, tetapi tidak untuk RedHat / CentOS yang gila bagi saya. Jadi saya perlu menulis satu karena lingkungan server kami dibatasi untuk menjalankan CentOS 5. Sumber untuk proyek ini dapat ditemukan di Bitbucket di sini .
Idenya adalah untuk menjalankan RhodeCode dengan Celery dan RabbitMQ. Semuanya ditulis dalam Python dan saya memiliki lingkungan di dalamnya wadah virtual terpisah menggunakan virtualenv. Saya mendapat ide untuk skrip shell di sini .
Saya telah membuat pengguna sistem bernama rhodecode dan membuat direktori / var / run / rhodecode dan itu dimiliki oleh rhodecode. Saya juga membuat / var / www / rhodecode di mana production.ini berada, serta /srv/rhodecode/start.sh, yang semuanya dimiliki oleh rhodecode.
Izin:
[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
Saya memiliki skrip bash dan shell berikut.
/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
Ketika saya menjalankan sudo /etc/init.d/rhodecode-server start
dan kemudian menjalankan ps -aux | grep paster
, saya dapat melihat paster serve production.ini
perintah dari /srv/rhodecode/start.sh melewati dan berjalan dengan id pengguna 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
Namun, tidak ada file pid yang dibuat, jadi saya tidak bisa menghentikan server dari skrip init saya. Saya tidak yakin mengapa daemon tidak membuat pidfile. Jalur ke file pid valid dan izin sudah benar. Pikiran?
/var/run/rhodecode/pid
benar untuk pengguna ini berjalan? Dalam hal ini, apakah variabel itu benar atau seharusnya/var/run/rhodecode.pid
?sh -x /etc/init.d/rhodecode-server start
?daemon --pidfile
hanya menentukan di mana file pid. fungsi dalam CentOS tampaknya tidak memiliki--make-pidfile
opsi yang diperlukanJawaban:
Saya pikir masalah Anda ada di
/srv/rhodecode/start.sh
. Saat ini mulaipaster
sebagai proses latar belakang yang terpisah dan kemudian segera keluar. Ini menimbulkan masalah bagi skrip init Anda, yang mengharapkanstart.sh
dirinya sendiri menjadi proses daemon yang berjalan lama untuk dikelola.Jadi, coba ubah baris terakhir
/srv/rhodecode/start.sh
menjadi sebagai berikut:Menggunakan
exec
makestart.sh
menjadipaster
, yang kemudian di daemonisasi olehdaemon
perintah dalam skrip init.sumber
Apakah Anda harus menentukan lokasi? Bisakah Anda menggunakan opsi --name untuk memberinya nama? Itu akan membuat PID untuk Anda dan membersihkannya setelah Anda selesai. Jadi akan terlihat seperti:
sumber
--name
atau--stop
dalam Centos 5 baik.