archlinux用了这么久,一直也懒,没有管它后台服务的处理,今天抽了一个时间编写了一下django的后台,启动fastcgi,和nginx一起使用。下面我就把这个服务贴出来,我也是依照其他的daemon的形式模仿写的,效果一样,呵呵。

#!/bin/bash

. /etc/rc.conf
. /etc/rc.d/functions

PROJECT="/home/hzg/work/fx_analysis"
PIDFILE="$PROJECT/log/mysite.pid"

PID=`cat $PIDFILE 2>/dev/null`

case "$1" in
  start)
    stat_busy "Starting Django Project fx_analysis Daemon"
    cd $PROJECT

    if [ -f $PIDFILE ]; then
      kill -9 `cat -- $PIDFILE` > /dev/null 2>&1
      rm -f -- $PIDFILE
    fi

    su - hzg  -c "source /home/hzg/mypy/bin/activate; cd $PROJECT; python ./manage.py runfcgi host=127.0.0.1 port=8000 pidfile=$PIDFILE --settings=settings"

    if [ $? -gt 0 ]; then
      stat_fail
    else
      add_daemon start_dj.sh
      stat_done
    fi
    ;;
  stop)
    stat_busy "Stopping Django Project fx_analysis Daemon"
    [ ! -z "$PID" ] && kill $PID &> /dev/null
    if [ $? -gt 0 ]; then
      stat_fail
    else
      rm_daemon start_dj.sh
      stat_done
    fi
    ;;
  restart)
    $0 stop
    sleep 1
    $0 start
    ;;
  *)
    echo "usage: $0 {start|stop|restart}" 
esac
exit 0

写完之后,把它放到/etc/rc.d/这个目录下去,在/etc/rc.conf中加入daemon={ ... start_dj.sh ...},开机就能以其他用户,和virtualenv本地的python环境,运行django project了,不用手动,全走自动。

应dotyao的要求,要用nginx用户来运行,我用了su -s的选项,临时给一个shell出来,把相应的目录权限调整成nginx的权限就可以了。

su - nginx -s /bin/bash  -c "source /home/hzg/mypy/bin/activate; cd $PROJECT; python ./manage.py runfcgi host=127.0.0.1 port=8000 pidfile=$PIDFILE --settings=settings"