Debian init script for virtualenv'd gunicorn_django

I recently moved my projects from wsgi to gunicorn and needed init scripts. Here's what I'm currently using.

I have the gunicorns running behind nginx, so you might want to tweak the IP and PORT settings.

It might also be nice to use start-stop-daemon.

#! /bin/sh
### BEGIN INIT INFO
# Provides:          gunicorn-initscript
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Should-Start:      $nginx
# Default-Start:     30 2 3 4 5
# Default-Stop:      70 0 1 6
# Short-Description: virtualenv + gunicorn + nginx debian init script
# Description:       virtualenv + gunicorn + nginx debian init script
### END INIT INFO

# Author: Nicolas Kuttler <hidden>
#
# Please remove the "Author" lines above and replace them
# with your own name if you copy and modify this script.
#
# Enable with update-rc.d gunicorn-example start 30 2 3 4 5 . stop 70 0 1 6 .
# (parameters might not be necessary, test)

# Do NOT "set -e"

PROJECT=/path/to/project/
VIRTUALENV=/path/to/virtualenv
PORT=8888
LOGDIR=/var/log/gunicorn/
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/bin:/usr/bin
USER=www-data
GROUP=www-data
IP=127.0.0.1
WORKERS=5
# I am lazy and just call the init script gunicorn-project
NAME=`basename $0`
DESC=$NAME
LOGFILE="$LOGDIR$NAME.log"
PIDFILE="$PROJECT$NAME.pid"
CMD="gunicorn_django --user=$USER --group=$GROUP --daemon --workers=$WORKERS --bind=$IP:$PORT --pid=$PIDFILE --name=$NAME --log-file=$LOGFILE --log-level=info"

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
# and status_of_proc is working.
. /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
do_start() {
  # Return
  #   0 if daemon has been started
  #   1 if daemon was already running
  #   2 if daemon could not be started
  if [ -e $PIDFILE ]; then
    return 1
  fi
  cd $PROJECT
  . $VIRTUALENV/bin/activate
  $CMD
  if [ $? = 0 ]; then
    return 0
  else
    return 2
  fi
}

#
# Function that stops the daemon/service
#
do_stop() {
  # Return
  #   0 if daemon has been stopped
  #   1 if daemon was already stopped
  #   2 if daemon could not be stopped
  #   other if a failure occurred
  if [ -f $PIDFILE ]; then
    PID=`cat $PIDFILE`
    rm $PIDFILE
    kill -15 $PID
    if [ $? = 0 ]; then
      return 0
    else
      return 2
    fi
  else
    return 1
  fi
}

do_reload() {
  if [ -f $PIDFILE ]; then
    PID=`cat $PIDFILE`
    kill -HUP $PID
    return $?
  fi
  return 2
}

case "$1" in
  start)
  [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
  do_start
  case "$?" in
    0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
    2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
  esac
  ;;
  stop)
  [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
  do_stop
  case "$?" in
    0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
    2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
  esac
  ;;
  restart)
  log_daemon_msg "Restarting $DESC" "$NAME"
  do_stop
  case "$?" in
    0|1)
    do_start
    case "$?" in
      0) log_end_msg 0 ;;
      1) log_end_msg 1 ;; # Old process is still running
      *) log_end_msg 1 ;; # Failed to start
    esac
    ;;
    *)
      # Failed to stop
    log_end_msg 1
    ;;
  esac
  ;;
  reload)
  log_daemon_msg "Reloading $DESC" "$NAME"
  do_reload
  case "$?" in
    0) log_end_msg 0 ;;
    *) log_end_msg 1 ;;
  esac
  ;;
  *)
  echo "Usage: $SCRIPTNAME {start|stop|restart|reload}" >&2
  exit 3
  ;;
esac

:

Published on July 15, 2011 at 12:44 p.m. by Nicolas and tagged Django, virtualenv, init, gunicorn, Debian. You can follow the discussion with the comment feed for this post. Feeling generous? Donate!

::...
免责声明:
当前网页内容, 由 大妈 ZoomQuiet 使用工具: ScrapBook :: Firefox Extension 人工从互联网中收集并分享;
内容版权归原作者所有;
本人对内容的有效性/合法性不承担任何强制性责任.
若有不妥, 欢迎评注提醒:

或是邮件反馈可也:
askdama[AT]googlegroups.com


订阅 substack 体验古早写作:


点击注册~> 获得 100$ 体验券: DigitalOcean Referral Badge

关注公众号, 持续获得相关各种嗯哼:
zoomquiet


自怼圈/年度番新

DU22.4
关于 ~ DebugUself with DAMA ;-)
粤ICP备18025058号-1
公安备案号: 44049002000656 ...::