Supervisor tidak memuat file konfigurasi baru

68

Saya memiliki masalah dalam menyebarkan aplikasi Django menggunakan Gunicorn dan Supervisor. Meskipun saya bisa membuat Gunicorn melayani aplikasi saya (dengan mengatur PYTHONPATH yang tepat dan menjalankan perintah yang tepat, yang dari supervisord config) saya tidak bisa membuat supervisor untuk menjalankannya. Itu tidak akan melihat aplikasi saya. Saya tidak tahu bagaimana memastikan apakah file config ok.

Inilah yang dikatakan supervisorctl:

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

Saya menjalankannya di Ubuntu 10,04 dengan konfigurasi berikut:

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

Di /etc/supervisor/supervisord.conf, di akhir file, ada:

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

dan inilah symlink ke file config saya:

# 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

semuanya terlihat baik untuk saya tetapi supervisorctl hanya terus berkata myapp_live: ERROR (no such process). Ada solusi untuk ini?

grucha
sumber
Saya menggaruk-garuk kepala dengan masalah yang sama; file konfigurasi saya tidak dimuat ketika saya menjalankan rereadatau update. Ternyata saya telah menyimpan file konfigurasi saya sebagai foo.conf.pygantinya foo.confsehingga mereka tidak diidentifikasi.
Timmy O'Mahony

Jawaban:

31

Saya memiliki masalah yang sama, a

sudo service supervisord reload

melakukan trik, meskipun saya tidak tahu apakah itu jawaban untuk pertanyaan Anda.

Hixi
sumber
2
Saya berhenti dan mulai menjadi penyelia beberapa waktu lalu dan berhasil. Tidak tahu apakah memuat ulang akan berhasil (karena saya bisa memulai ulang tidak) tapi saya kira itu bisa
grucha
Saya melakukannya juga dan berhasil. Saya bertanya-tanya mengapa /etc/init.d/supervisor restarttidak bekerja ketika manual berhenti dan mulai dilakukan.
Kirill
1
Bekerja untuk saya, meskipun layanan tidak bekerja jadi saya hanya berlari ps aux | grep supervisordan kemudiansudo kill -HUP pid
Wayne Werner
2
Ini berbahaya karena akan memulai ulang seluruh daemon pengawas.
Mark Theunissen
7
membaca ulang supervisorctl juga dapat memperbaiki ini tanpa memulai kembali layanan.
Jonathan Liuti
199

Jawaban yang benar adalah bahwa penyelia mengharuskan Anda membaca kembali dan memperbarui ketika Anda menempatkan file konfigurasi baru. Restart bukan jawabannya, karena itu akan memengaruhi layanan lain. Mencoba:

supervisorctl reread
supervisorctl update
Mark Theunissen
sumber
13
Ini seharusnya jawaban yang benar. "supervisor reread" saja tidak cukup.
Miebster
3
+1 Ini adalah jawaban yang lebih baik karena tidak bergantung pada Manajer Proses.
tidwall
8
"membaca supervisorctl" saja tidak cukup, tetapi tidakkah cukup "update supervisorctl" cukup? Menurut dokumentasi "pembaruan" membaca ulang diikuti dengan restart dari setiap program yang konfigurasinya dimodifikasi oleh membaca ulang.
BlueBomber
Ini bekerja untuk saya. Saya telah melakukan restart sesudahnya.
user1012513
15

Pastikan file conf supervisor Anda diakhiri dengan .conf

Butuh waktu beberapa saat untuk memikirkannya. Semoga ini membantu orang selanjutnya.

nym
sumber
1
Membuang waktu satu jam untuk masalah yang sama - tidak percaya itu sesederhana ini.
Zane Hooper
1
Terima kasih telah mendaftar jawaban ini. Untuk kehidupan saya, saya tidak bisa memikirkan ini.
Phillip Martin
14

Reload proses supervisor master mungkin berhasil, tetapi akan memiliki efek samping yang tidak diinginkan jika Anda memiliki lebih dari satu proses yang dipantau oleh supervisor.

Cara yang benar untuk melakukannya adalah dengan mengeluarkan supervisorctl rereadyang menyebabkannya memindai file konfigurasi untuk setiap perubahan:

root@debian:~# supervisorctl reread
gunicorn: changed

Kemudian, cukup memuat ulang aplikasi itu:

root@debian:~# supervisorctl restart gunicorn
gunicorn: stopped
gunicorn: started
Burhan Khalid
sumber
Ini adalah solusi terbaik jika Anda hanya ingin membaca file konfigurasi yang diubah / baru dan membiarkan semua proses yang berjalan tidak tersentuh. Supervisorctl akan menunjukkan aplikasi baru tersebut avail. Tambahkan ke proses (kembali) yang dapat dimulai dengan mengeluarkan supervisorctl update. Lihat juga jawaban Mark serverfault.com/a/479754/125887
Sjaak Trekhaak
4
Ini tidak cukup bagi saya. supervisorctl updateitu perlu.
Yaroslav Nikitenko
5

Saya mengalami masalah ini menggunakan paket pengawas, versi 3.0a8-1.1 dari Ubuntu Server 12.10. Saya akhirnya memecahkan masalah dengan membaca bantuan bawaan:

$ 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

Khususnya Anda ingin menggunakan sintaks:

sudo supervisorctl restart myapp_live:*

Seperti yang dinyatakan dalam dokumentasi di http://supervisord.org/configuration.html#programx-section - "Bagian [program: x] sebenarnya mewakili" grup proses yang homogen "kepada penyelia (per 3.0)." Jadi mungkin masalahnya pertama kali muncul di versi 3.0.

PS: Saya baru ke pengawas; Saya menggunakan https://github.com/bdarnell/tornado-production-skeleton/blob/8ad055457646929c0e8f48aaf20d98f054b1787b/production/chat.supervisor sebagai contoh bentuk konfigurasi minimal.

pikomancer
sumber
4

Saya punya masalah yang sama ( myapp_live: ERROR (no such process)) dan itu karena definisi proses saya

[program: myapp_live]

padahal seharusnya

[program:myapp_live]

Meskipun ini tidak menjawab pertanyaan yang diajukan, saya dipimpin di sini oleh Pencarian yang mencari solusi untuk masalah saya, jadi semoga orang lain juga menemukannya di sini.

Conrad.Dean
sumber
Sama disini! Saya telah meninggalkannya [program]hanya sebagai , mengikuti dokumen, tetapi membuatnya [program:redis]membuatnya bekerja untuk saya. Terkadang hal-hal menjadi aneh!
ankush981
2

Saya menemukan solusi ini paling nyaman:

EDIT: sebelum melakukan ini, periksa jalur supervisorctl Anda gunakan which supervisorctluntuk memastikan Anda menambahkan jalur yang benar ke sudoers.

Tambahkan baris ini ke file sudoers menggunakan visudo(di mana: myappuser- pengguna yang perlu me-restart aplikasi Anda, myapp- nama aplikasi):

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

Dan kemudian secara sederhana:

sudo supervisorctl restart myapp

Anda tidak terikat dengan skrip startup distribusi dan Anda memberikan hak yang cukup sempit untuk pengguna me-restart aplikasi gunicorn Anda. Juga, Anda tidak perlu peduli dengan pid. Perintah tidak akan meminta kata sandi sehingga cocok untuk skrip bash / fabric auto-deployment. Di sisi lain - Anda harus sadar, bahwa jika supervisorctl rentan terhadap beberapa bug yang menyebabkan eksekusi kode, pengguna jahat dapat menggunakan hak akses sudo ini untuk menjalankan kode sebagai root (tetapi sejauh yang saya tahu tidak ada bug seperti itu ditemukan untuk supervisord dan itu adalah hal besar untuk menemukan kerentanan seperti itu).

pielgrzym
sumber
2

Membaca kode supervisorctl.py di sini: https://github.com/Supervisor/supervisor/blob/master/supervisor/supervisorctl.py

Anda dapat melihat bahwa pembaruan supervisorctl (fungsi do_update) memanggil reloadConfig () persis seperti membaca ulang supervisorctl (fungsi do_reread).

Jadi saya pikir tidak perlu menelepon ulang jika Anda memanggil pembaruan setelahnya.

Dari hasil kesalahan git sudah seperti ini sejak setidaknya sejak Juli 2009.

Sebastien Estienne
sumber
2

Ini daftar periksa:

  1. File config baru harus dinamai sesuai dengan pola include yang dikonfigurasi di /etc/supervisord.conf:

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

    Seperti yang kita lihat dalam kasus saya, spam.ini akan dimasukkan, tetapi spam.conf tidak akan.

  2. Jika Anda membuat file baru dengan menyalin yang lama, pastikan untuk benar-benar mengubah [program:]baris. Karena jika Anda sebodoh memiliki dua file untuk program yang sama, supervisorctl rereadakan meninggalkan Anda dengan pesan kesalahan tanpa harapan sebagai hukuman:

    No config updates to processes
    
  3. Jika file Anda terdeteksi, supervisorctl rereadharus mengatakan sesuatu seperti:

    spam: available
    
  4. Kemudian, supervisorctl update spamkeduanya harus memulainya dan membuatnya muncul di supervisorctl status.

pengguna2394284
sumber
1

Saya telah menemukan skrip init.d tidak dapat diandalkan pada berbagai versi Ubuntu / Debian yang berbeda. Cara melakukannya adalah ini:

sudo supervisorctl reload
mafrosis
sumber
Ini bukan cara yang tepat untuk melakukannya walaupun itu akan berhasil dalam banyak keadaan. @ burhan-khalid jawaban adalah yang benar, dan memberikan penjelasan untuk itu.
glarrain
1

Hati-hati dengan symlink dan sertakan file pada Supervisor. Ini akan memungkinkan siapa pun dengan hak istimewa di /home/myapp/live/deploy/supervisord_live.ini untuk mengubah file ini dan memulai kode berbahaya apa pun. File ini harus di dalam direktori conf atasan Anda atau di subdirektori di bawahnya.

Leo Pepe
sumber
0

Saya telah menginstal supervisrod dengan yum install, yang menginstal supervisor versi v2. *. Pengawas mendukung eksternal hanya mencakup dari versi 3. Harus menggunakan easy_install sebagai gantinya, untuk menginstal supervisor v3.

Aidas
sumber
Ini juga masalah saya, mungkin akan terjadi pada semua instalasi Centos 6.5 atau kurang.
bearrito