gunicorn startup script for Django
I've been using Django a lot recently and had this startup script that I use and thought others might find useful :)
#!/bin/sh ADDRESS='127.0.0.1' PYTHON="/opt/django/bin/python" GUNICORN="/opt/django/bin/gunicorn_django" PROJECTLOC="/opt/django/project" MANAGELOC="$PROJECTLOC/manage.py" DEFAULT_ARGS="--workers=3 --daemon --bind=$ADDRESS:" BASE_CMD="$GUNICORN $DEFAULT_ARGS" SERVER1_PORT='8200' SERVER1_PID="$PROJECTLOC/$SERVER1_PORT.pid" SERVER2_PORT='8201' SERVER2_PID="$PROJECTLOC/$SERVER2_PORT.pid" start_server () { if [ -f $1 ]; then #pid exists, check if running if [ "$(ps -p `cat $1` | wc -l)" -gt 1 ]; then echo "Server already running on ${ADDRESS}:${2}" return fi fi cd $PROJECTLOC echo "starting ${ADDRESS}:${2}" $BASE_CMD$2 --pid=$1 } stop_server (){ if [ -f $1 ] && [ "$(ps -p `cat $1` | wc -l)" -gt 1 ]; then echo "stopping server ${ADDRESS}:${2}" kill -9 `cat $1` rm $1 else if [ -f $1 ]; then echo "server ${ADDRESS}:${2} not running" else echo "No pid file found for server ${ADDRESS}:${2}" fi fi } case "$1" in 'start') start_server $SERVER1_PID $SERVER1_PORT start_server $SERVER2_PID $SERVER2_PORT ;; 'stop') stop_server $SERVER1_PID $SERVER1_PORT stop_server $SERVER2_PID $SERVER2_PORT ;; 'restart') stop_server $SERVER1_PID $SERVER1_PORT sleep 2 start_server $SERVER1_PID $SERVER1_PORT sleep 2 stop_server $SERVER2_PID $SERVER2_PORT sleep 2 start_server $SERVER2_PID $SERVER2_PORT ;; *) echo "Usage: $0 { start | stop | restart }" ;; esac exit 0
Just make sure to fill in all the variables to your liking.
Adding the script
This works for ubuntu at least...
- Place the script in the file /etc/init.d/gunicorn or whatever you'd like to call it
- make it executable
chmod +x /etc/init.d/gunicorn
- And finally, wire it up
update-rc.d gunicorn defaults