A better way to restart/reload Gunicorn (via Upstart) after 'git pull'ing my Django projects
You can tell Gunicorn to reload gracefully using the HUP
signal like so:
kill -HUP <pid>
(see the FAQ for details)
I use Supervisor to control my Gunicorn server, which allows me to use this (slightly hacky) way of reloading Gunicorn after a deploy:
supervisorctl status gunicorn | sed "s/.*[pid ]\([0-9]\+\)\,.*/\1/" | xargs kill -HUP
You could obviously achieve something similar with pidof
, or ps
.
This is actually run from a Fabric script, so I don't even have to logon to the server at all.
For those not using supervisord: what Rob said, it works with ps as well,
ps aux |grep gunicorn |grep projectname | awk '{ print $2 }' |xargs kill -HUP
For a graceful reload, you should instead use Upstart's reload
command, e.g.:
sudo reload jobname
According to the initctl (Upstart) manpage, reload
will send a HUP
signal to the process:
reload JOB [KEY=VALUE]...
Sends the SIGHUP signal to running process of the named JOB instance.
...which for Gunicorn will trigger a graceful restart (see FAQ).