Danışman yeni yapılandırma dosyaları yüklemiyor


68

Gunicorn ve Supervisor'ı kullanarak Django uygulamasını dağıtırken bir sorunum var. Gunicorn'un benim uygulamamı sunmasını sağlarken (uygun PYTHONPATH ayarlayarak ve uygun komutu çalıştırarak, süpervizör yapılandırmasından gelen komutla) Bunu çalıştırmak için süpervizör yapamıyorum. Sadece uygulamamı görmeyecek. Config dosyasının iyi olup olmadığından nasıl emin olacağımı bilmiyorum.

İşte süpervizörün söylediği:

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

Aşağıdaki yapılandırma ile Ubuntu 10.04'te çalıştırıyorum:

/Home/myapp/live/deploy/supervisord_live.ini dosyası:

[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

/Etc/supervisor/supervisord.conf dosyasında, dosyanın sonunda:

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

ve işte config dosyama bir link:

# 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

her şey benim için iyi görünüyor ama süpervizör sadece söylemeye devam ediyorum myapp_live: ERROR (no such process). Bunun için herhangi bir çözüm?


Kafamı da aynı problemle tırmalamıyordum; Yapılandırma dosyalarım çalıştırdığımda rereadveya yüklenmediğinde update. Anlaşıldı ki bunlar benim yapılandırma dosyalarımın foo.conf.pyyerine kaydedilmemişti foo.conf.
Timmy O'Mahony

Yanıtlar:


31

Ben de aynı sorunu yaşadım

sudo service supervisord reload

hile yaptım, ama sorunun cevabını bu olup olmadığını bilmiyorum.


2
Bir süre önce durdum ve sonra amirliğe başladım ve işe yaradı. Yeniden doldurmanın işe
yarayıp

Ben de yaptım ve işe yaradı. /etc/init.d/supervisor restartManuel durdurup başlatıldığında neden çalışmadığını merak ediyorum .
Kirill

1
Benim için çalıştı, hizmet işe yaramadı, bu yüzden sadece koştum ps aux | grep supervisorve sonrasudo kill -HUP pid
Wayne Werner

2
Bu, gözetmen arka planının tamamını yeniden başlatacağından tehlikelidir.
Mark Theunissen

7
Supervisorctl yeniden okuyucusu hizmeti yeniden başlatmadan da çözebilir.
Jonathan Liuti

199

Doğru cevap, denetçinin yeni bir yapılandırma dosyası yerleştirdiğinizde yeniden okumanızı ve güncellemenizi gerektirdiğidir . Yeniden başlatma, diğer hizmetleri etkileyeceğinden cevap değildir. Deneyin:

supervisorctl reread
supervisorctl update

13
Bu doğru cevap olmalı. "Gözetmen yeniden okur" tek başına yeterli değil.
Miebster

3
+1 Bu daha iyi bir cevap çünkü Süreç Yöneticilerine güvenmiyor.
tidwall

8
"Gözetmen Okur" tek başına yeterli değildir, ancak "Gözetmen Güncellemesi" yeterli olmaz mı? Belgelere göre "güncelleme", bir yeniden okuma yapar ve ardından yeniden yapılandırma tarafından yapılandırılan programların yeniden başlatılması.
BlueBomber

Bu benim için çalışıyor. Daha sonra yeniden başlattım.
user1012513

15

Danışmanınızın conf dosyalarının .conf ile bittiğinden emin olun

Bunu anlamak için biraz zaman aldı. Umarım bir sonraki kişiye yardımcı olur.


1
Aynı konuda bir saat harcadım - bu kadar basit olduğuna inanamıyorum.
Zane Hooper

1
Bu cevabı listelediğiniz için teşekkürler. Hayatım boyunca bunu çözemedim.
Phillip Martin

14

Ana denetim otoritesini yeniden yüklemek işe yarayabilir, ancak denetleyici tarafından birden fazla işlem izleniyorsa, istenmeyen yan etkileri olacaktır.

Bunu yapmanın doğru yolu, supervisorctl rereadherhangi bir değişiklik için yapılandırma dosyalarını taramasına neden olan sorundur :

root@debian:~# supervisorctl reread
gunicorn: changed

Ardından, sadece bu uygulamayı yeniden yükleyin:

root@debian:~# supervisorctl restart gunicorn
gunicorn: stopped
gunicorn: started

Bu, yalnızca değiştirilmiş / yeni bir yapılandırma dosyasını okumak ve çalışan işlemlerin geri kalanına dokunulmamasını istiyorsanız en iyi çözümdür. Supervisorctl yeni uygulamayı gösterecek avail. Düzenleyerek (yeniden) başlatılabilir işlemlere ekleyin supervisorctl update. Ayrıca bakınız Mark'ın cevabı serverfault.com/a/479754/125887
Sjaak Trekhaak

4
Bu benim için yeterli değildi. supervisorctl updategerekliydi.
Yaroslav Nikitenko,

5

Bu sorunla Ubuntu Server 12.10'daki süpervizör paketi 3.0a8-1.1 paketini kullanarak karşılaştım. Yerleşik yardımı okuyarak sorunu çözdüm:

$ 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

Özellikle sözdizimini kullanmak istiyorsunuz:

sudo supervisorctl restart myapp_live:*

Dokümanlar http://supervisord.org/configuration.html#programx-section - "A [program: x] bölümü aslında süpervizöre (3.0'dan itibaren)" homojen bir süreç grubunu "temsil eder. Belki de problem ilk önce 3.0 sürümünde ortaya çıkmıştır.

Not: Danışmanda yeniyim; Minimum bir yapılandırmanın nasıl görünmesi gerektiğine bir örnek olarak https://github.com/bdarnell/tornado-production-skeleton/blob/8ad055457646929c0e8f48aaf20d98f054b1787b/production/chat.supervisor kullanıyorum .


4

Ben de benzer bir problem yaşadım ( myapp_live: ERROR (no such process)) ve bunun nedeni süreç tanımımdı.

[program: myapp_live]

ne zaman olmalı

[program:myapp_live]

Bu sorulan soruyu ele almazken, burada benim sorunum için bir çözüm arayan Ara ile yönlendirildim, umarım başkaları da burada bulur.


Burada aynı! [program]Sadece doktorları takip ederek bırakmıştım , ancak onu [program:redis]benim için çalıştırdı. İşler bazen garipleşiyor!
ankush981

2

Bu çözümü en uygun buldum:

EDIT: Bunu yapmadan önce which supervisorctlsudoers'a doğru yolu eklediğinizden emin olmak için kullanarak süpervizör yolunuzu kontrol edin .

Aşağıdaki satırı kullanarak sudoers dosyasına ekleyin visudo(nerede: myappuser- uygulamanızı yeniden başlatması gereken kullanıcı, myapp- uygulama adı):

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

Ve sonra basitçe:

sudo supervisorctl restart myapp

Dağıtımın başlangıç ​​komut dosyalarına bağlı değilsiniz ve gunicorn uygulamanızı yeniden başlatan kullanıcıya oldukça dar ayrıcalıklar veriyorsunuz. Ayrıca, pid umrunda değil. Komut parola sormaz, bu nedenle otomatik konuşlandırma bash / fabric komut dosyaları için uygundur. Öte yandan - eğer süpervizör, kod çalıştırmaya neden olan bir hataya açıksa, kötü niyetli bir kullanıcının bu sudo ayrıcalığını root olarak çalıştırmak için bu sudo ayrıcalığını kullanabileceğini (ama bildiğim kadarıyla süpervizör için böyle bir hata bulunamadığını bilmelisiniz). bu güvenlik açığını bulmak büyük bir şeydir).


2

Supervisorctl.py kodunu burada okuyun: https://github.com/Supervisor/supervisor/blob/master/supervisor/supervisorctl.py

Supervisorctl güncellemesinin (işlev do_update) tam olarak supervisorctl reread (işlev do_reread) işleviyle reloadConfig () öğesini çağırdığını görebilirsiniz.

Bu yüzden, eğer ondan sonra güncelleme yaparsanız, tekrar okumaya gerek olmadığını düşünüyorum.

Git suçu çıkışından bu yana en azından Temmuz 2009'dan bu yana böyle oldu.


2

İşte bir kontrol listesi:

  1. Yeni config dosyası, /etc/supervisord.conf dosyasında yapılandırılmış include şablonuna göre adlandırılmalıdır:

    [include]
    files=supervisord.d/*.ini
    

    Benim durumumda gördüğümüz gibi, spam.ini dahil edilecek, ancak spam.conf eklenmeyecektir.

  2. Eski dosyayı kopyalayarak yeni dosyayı oluşturduysanız, [program:]satırı değiştirdiğinizden emin olun . Çünkü aynı program için iki dosyaya sahip olmak kadar aptalsanız, supervisorctl rereadsizi bu umutsuz hata mesajıyla birlikte ceza olarak bırakacaktır:

    No config updates to processes
    
  3. Dosyanız algılanırsa, supervisorctl rereadşöyle bir şey söylemelisiniz:

    spam: available
    
  4. Sonra, supervisorctl update spamher ikisi de başlamalı ve görünmesini sağlamalıdır supervisorctl status.


1

İnit.d scriptlerinin çeşitli Ubuntu / Debian versiyonlarında güvenilmez olduğunu buldum. Bunu yapmanın yolu şudur:

sudo supervisorctl reload

Bu, birçok durumda işe yarayacak şekilde yapmanın doğru yolu değildir. @ burhan-khalid cevabı doğru olanıdır ve bunun için bir açıklama sunar.
glarrain

1

Sembolik bağlantılara dikkat edin ve Danışman'a dosya ekleyin. /Home/myapp/live/deploy/supervisord_live.ini adresindeki imtiyazlı herhangi bir kimsenin, ini dosyasını değiştirmesine ve kötü amaçlı kod başlatmasına izin verir. Bu ini dosyaları amirinizin conf dizininde veya altındaki herhangi bir alt dizinde olmalıdır.


0

Supervisrod'u v2 sürümünün süpervizörünü yüklediğim yum install ile kurdum. Süpervizör, yalnızca 3. sürümdeki harici destekleri destekler. Süpervizör v3'ü yüklemek için bunun yerine easy_install kullanmak zorunda kaldı.


Bu da benim sorunumdu, muhtemelen tüm Centos 6.5 ya da daha az kurulumunda ortaya çıkacak.
bearrito,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.