Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I have a problem deploying Django app using Gunicorn and Supervisor. While I can make Gunicorn serving my app (by setting proper PYTHONPATH and running apropriate command, the one from supervisord config) I can't make supervisor to run it. It just won't see my app. I don't know how to make sure if the config file is ok.

Here's what supervisorctl says:

# supervisorctl start myapp_live
myapp_live: ERROR (no such process)

I'm running it on Ubuntu 10.04 with following config:

File /home/myapp/live/deploy/supervisord_live.ini:

[program:myapp_live]
command=/usr/local/bin/gunicorn_django --log-file /home/myapp/logs/gunicorn_live.log --log-level info --workers 2 -t 120 -b 127.0.0.1:10000 -p deploy/gunicorn_live.pid webapp/settings_live.py
directory=/home/myapp/live
environment=PYTHONPATH='/home/myapp/live/eco/lib'
user=myapp
autostart=true
autorestart=true

In /etc/supervisor/supervisord.conf, at the end of the file, there is:

[include]
files = /etc/supervisor/conf.d/*.conf

and here's a symlink to my config file:

# ls -la /etc/supervisor/conf.d
lrwxrwxrwx 1 root root   48 Dec  4 18:02 myapp-live.conf -> /home/myapp/live/deploy/supervisord_live.ini

everything looks fine for me but supervisorctl just keep saying myapp_live: ERROR (no such process). Any solution for this?

share|improve this question

8 Answers 8

up vote 12 down vote accepted

I had the same issue, a

sudo service supervisord reload

did the trick, though I don't know if that is the answer to your question.

share|improve this answer
2  
I stopped and then started supervisor some time ago and it worked. Don't know if reload would work (as I heart restart doesn't) but I guess it could –  grucha Dec 21 '10 at 8:41
    
I did it too and it got worked. I wonder why /etc/init.d/supervisor restart doesn't work when manual stop and start do. –  Kirill Feb 29 '12 at 12:33
1  
Worked for me, though the service didn't work so I just ran ps aux | grep supervisor and then sudo kill -HUP pid –  Wayne Werner Aug 13 '12 at 3:04
    
This is dangerous as it will restart the whole of the supervisor daemon. –  Mark Theunissen Feb 17 '13 at 20:04
1  
supervisorctl reread can fix this aswell without restarting the service. –  Jonathan Liuti Aug 27 '13 at 13:20

The correct answer is that supervisor requires you to re-read and update when you place a new configuration file. Restarting is not the answer, as that will affect other services. Try:

supervisorctl reread
supervisorctl update
share|improve this answer
2  
This should be the correct answer. "supervisor reread" alone is not enough. –  Miebster Oct 21 '13 at 16:04
    
+1 This is a better answer because it doesn't rely on Process Managers. –  jojaba Jul 30 at 15:29

Reloading the master supervisor process may work, but it will have unintended side effects if you have more than one process being monitored by supervisor.

The correct way to do it is to issue supervisorctl reread which causes it to scan configuration files for any changes:

root@debian:~# supervisorctl reread
gunicorn: changed

Then, simply reload that app:

root@debian:~# supervisorctl restart gunicorn
gunicorn: stopped
gunicorn: started
share|improve this answer
    
This is the best solution if you only want to read a changed/new config file and leave the rest of the running processes untouched. Supervisorctl will show the new app is avail. Add it to the (re)startable processes by issueing supervisorctl update. See also Mark's answer serverfault.com/a/479754/125887 –  Sjaak Trekhaak Jun 13 '13 at 7:23

I found this solution to be most convenient:

EDIT: before doing this check your supervisorctl path using which supervisorctl to make sure you are adding right path to sudoers.

Add this line to sudoers file using visudo (where: myappuser - the user that needs to restart your app, myapp - app name):

myappuser  ALL=(ALL) NOPASSWD: /usr/bin/supervisorctl restart myapp

And then simply:

sudo supervisorctl restart myapp

You are not tied to distribution's startup scripts and you give quite narrow privileges to user restarting your gunicorn app. Also, you don't need to care about pid. The command will not ask for password so it's suitable for auto-deployment bash/fabric scripts. On the other hand - you have to be aware, that if supervisorctl is vulnerable to some bug causing code execution a malicious user could use this sudo privilege to run code as root (but as far as I know no such bug was discovered for supervisord and it's a big thing to find such vulnerability).

share|improve this answer

I've found the init.d scripts to be unreliable on a variety of different Ubuntu/Debian versions. The way to do it is this:

sudo supervisorctl reload
share|improve this answer
    
This is not the right way to do it although it will work in many circumstances. @burhan-khalid answer is the right one, and provides an explanation for it. –  glarrain Apr 26 '13 at 18:26

I encountered this problem using the supervisor package, version 3.0a8-1.1 from Ubuntu Server 12.10. I ended up solving the problem by reading the built-in help:

$ sudo supervisorctl help restart
restart <name>          Restart a process
restart <gname>:*       Restart all processes in a group
restart <name> <name>   Restart multiple processes or groups
restart all             Restart all processes

In particular you want to use the syntax:

sudo supervisorctl restart myapp_live:*

As the documentation states at http://supervisord.org/configuration.html#programx-section -- "A [program:x] section actually represents a “homogeneous process group” to supervisor (as of 3.0)." So maybe the problem first surfaced in version 3.0.

PS: I'm new to supervisor; I'm using https://github.com/bdarnell/tornado-production-skeleton/blob/8ad055457646929c0e8f48aaf20d98f054b1787b/production/chat.supervisor as an example of what a minimal configuration should look like.

share|improve this answer

I had a similar problem ( myapp_live: ERROR (no such process) ) and it was because my process definition was

[program: myapp_live]

when it should have been

[program:myapp_live]

While this doesn't address the question that was asked, I was lead here by the Search that Be looking for a solution to my problem, so hopefully other people find it here, too.

share|improve this answer

I had installed supervisrod with yum install, which installed supervisor of version v2.*. Supervisor supports external includes only from version 3. Had to use easy_install instead, to install supervisor v3.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.