2012-05-15 11 views
5

Sono la creazione di un server per ospitare un app Django che ha:Supervisord: c'è un modo per ricaricare un bambino?

  1. uWSGI app avviato da init uWSGI sceneggiatura di ubuntu
  2. celeryd iniziato da supervisord

Così sto scrivendo un distribuire script che sarà: codice

  1. tirare da git
  2. Migrazione del DB
  3. Dì al uWSGI di riavviarsi, quindi riprenderà il nuovo codice.
  4. Dì al celeryd di riavviare, quindi riprenderà anche il nuovo codice.

uWSGI ha questa funzione di configurazione:

touch-reload 
gracefully reload the uWSGI stack when a file/directory changes. 

Quindi il mio script è eseguito dall'utente non privilegiato in cui vengono eseguiti tutti i processi della app.

Per riavviare uWSGI Posso semplicemente touch ~/.restart_uwsgi.

C'è un modo che io possa fare la stessa cosa per l'esecuzione in celerydsupervisord senza concedere l'accesso sudo per l'utente senza privilegi, così da poter supervisorctl restart celeryd?

risposta

0

Dal momento non ho ancora trovato un modo migliore per fare questo, ecco quello che sto facendo in questo momento:

# restart_my_proc.sh: 
#!/bin/sh 
supervisorctl restart <my_proccess_name> 

chmod +x restart_my_proc.sh 

# sudoers: 
<site_user> ALL= NOPASSWD:/path/to/restart_my_proc.sh 

# my_deploy_script.sh 
sudo /path/to/restart_my_proc.sh 

Così sto usando sudo, non è la soluzione migliore, ma funziona.

Se qualcuno ha una risposta migliore, cambierò volentieri la risposta accettata.

+0

Penso che un piccolo Listener di eventi sia una soluzione migliore: http://stackoverflow.com/questions/20227965/is-there-a-way-toautomatically-reload-supervisor-processes/20298885#20298885 – soulseekah

+0

I Ho visto alcuni sviluppatori di django/python che usano i processi di supervisione in esecuzione in userspace, invece di usare l'installazione globale '/ etc /'. che ha reso facile l'aggiornamento/aggiornamento. – patroqueeet

Problemi correlati