j7nn7k
j7nn7k

Reputation: 18602

How to start gunicorn via Django manage.py after server reboot

I am starting gunicon by calling python manage.py run_gunicorn (inside a virtualenv).

How can I achieve to restart gunicorn after my Ubuntu 12.04 server rebooted?

Upvotes: 2

Views: 2751

Answers (3)

Hamid Zandi
Hamid Zandi

Reputation: 2902

this is based on @j7nn7k answer but with a bit changes

1 - create a .conf file in /etc/init dir to run with upstart

cd /etc/init
nano django_sf_flavour.conf

2 - put below lines in django_sf_flavour file and save it.

description "Run Custom Script"
start on runlevel [2345]
stop on runlevel [06]
respawn
respawn limit 10 5
exec /home/start_gunicorn.sh

3 - create start_gunicorn.sh file in home dir with following lines

cd /home
nano start_gunicorn.sh

4 - put these code in it and save it.

#!/bin/bash
set -e
cd mysite
source myenv/bin/activate
test -d $LOGDIR || mkdir -p $LOGDIR
exec gunicorn —bind 0.0.0.0:80 mysite.wsgi:application

5 - set runable permission to start_gunicorn.sh

cd /home
chmod 775 start_gunicorn.sh

** extra **

check syntax django_sf_flavour.conf with this command

init-checkconf /etc/init/django_sf_flavour.conf

and answer should be like this:

File /etc/init/django_sf_flavour.conf: syntax ok

you can see problems in upstart log file if needed:

cat /var/log/upstart/django_sf_flavour.log

test your django_sf_flavour.conf file like this without reboot

service django_sf_flavour start

test your bash file "start_gunicorn.sh" like this

cd /home 
bash start_gunicorn.sh 

check state of django_sf_flavour

initctl list | grep django_sf_flavour

Upvotes: 0

j7nn7k
j7nn7k

Reputation: 18602

Since I'm on Ubuntu and like to work with tools already included in the distro I used Upstart to start gunicorn after booting the machine.

I put the following code into /etc/init/django_sf_flavour.conf :

description "Run Custom Script"
start on runlevel [2345]
stop on runlevel [06]
respawn
respawn limit 10 5
exec /home/USER/bin/start_gunicorn.sh

Which executes this file (/home/USER/bin/start_gunicorn.sh) after booting:

#!/bin/bash
set -e
cd MY_PROJ_ROOT
source venv/bin/activate
test -d $LOGDIR || mkdir -p $LOGDIR
exec python MY_PROJ_PATH/manage.py run_gunicorn

Upvotes: 3

Saulius Žemaitaitis
Saulius Žemaitaitis

Reputation: 2974

You can use supervisor to launch your app on startup and restart on crashes.

Install supervisor and create a config file /etc/supervisor/conf.d/your_app.conf with content like this:

[program:your_app]
directory=/path/to/app/working/dir
command=/path/to/virtualenv_dir/bin/python /path/to/manage_py/manage.py run_gunicorn
user=your_app_user
autostart=true
autorestart=true

Upvotes: 3

Related Questions