Supervisor selalu berhenti proses dengan 'exit status 0; tidak diharapkan'

13

Saat ini saya sedang membangun kembali vps saya, dan saya ingin menggunakan pengawas untuk mengelola proses gunjorn django saya. Masalahnya, pengawas terus keluar dari proses:

2010-07-23 14:54:40,575 INFO supervisord started with pid 31391
2010-07-23 14:54:41,582 INFO spawned: 'projectx' with pid 31395
2010-07-23 14:54:41,691 INFO exited: projectx (exit status 0; not expected)
2010-07-23 14:54:42,695 INFO spawned: 'projectx' with pid 31401
2010-07-23 14:54:42,801 INFO exited: projectx (exit status 0; not expected)
2010-07-23 14:54:44,806 INFO spawned: 'projectx' with pid 31404
2010-07-23 14:54:44,912 INFO exited: projectx (exit status 0; not expected)
2010-07-23 14:54:47,917 INFO spawned: 'projectx' with pid 31408
2010-07-23 14:54:48,022 INFO exited: projectx (exit status 0; not expected)
2010-07-23 14:54:49,023 INFO gave up: projectx entered FATAL state, too many start retries too quickly

Ini adalah konfigurasi yang saya gunakan:

[program:projectx]
command=/path/to/project/bin/gunicorn_django -c /path/to/project/project/gunicorn.conf.py /path/to/project/project/production.py
user=myuser
autostart=true
autorestart=true

Saya sudah double check, dan gunicorn_django mengembalikan status 0 ketika sudah muncul dengan benar.

Saya mencoba menambahkan kode keluar = 0,2 secara eksplisit ke konfigurasi, tetapi itu tampaknya tidak membuat perbedaan juga. Sepertinya proses tersebut terjadi dengan benar, tetapi penyelia mengira tidak.

Adakah yang punya petunjuk tentang cara mengatasi ini?

Terima kasih, Bjorn

Bjorn
sumber

Jawaban:

12

Jika gunicorn_django melakukan daemonisasi sendiri, itu bukan jenis pengawas program yang dirancang untuk dikelola. Supervisor mengharapkan program yang diawasi untuk dijalankan di latar depan sehingga dapat memonitor jika mereka sudah keluar.

Lihat dokumen supervisor .

Drew Bloechl
sumber
gunicorn tidak mendeamatisasi sendiri secara default, tetapi saya telah mengaturnya di file konfigurasi saya. Saya menghapusnya, terima kasih sudah menunjukkannya.
Bjorn
4

Ok, setelah beberapa kebingungan saya menemukan itu ada hubungannya dengan pengguna. Saya mencoba menjalankan proses anak saya sebagai pengguna tertentu. Setelah menghapus garis (lihat konfigurasi saya di bawah), semuanya berfungsi dengan baik.

Konfigurasi Gunicorn:

bind = "127.0.0.1:3305"
workers = 2

Konfigurasi pengawas:

[program:projectx]
command=/path/to/project/bin/gunicorn_django -c /path/to/project/project/gunicorn.conf.py /path/to/project/project/production.py
; set the user here instead of in the gunicorn config.
user=user
autostart=true
autorestart=unexpected
stdout_logfile=/path/to/project/logs/project.log
redirect_stderr=true
exitcodes=1
Bjorn
sumber
1
Hanya catatan singkat bahwa jika Anda ingin menyempurnakan ini, menuntut pengguna saya dan menjalankan gunicorn harus memberikan petunjuk. Tersangka yang biasa adalah file log dan pid tidak dapat ditulisi. Atau, aplikasi Anda mungkin memerlukan izin file juga. Dan hanya catatan singkat bahwa untuk dukungan penyelia yang lebih baik Anda harus memutakhirkan ke 0.10 karena kami memperbaiki masalah dengan memulai kembali gunicorn melalui pengawas (atau runit dalam hal ini).
Paul J. Davis
0

Saya mendapat kesalahan serupa ketika mencoba mengeksekusi daemon http di bawah supervisor.

Diperbaiki dengan menghapus file pid lama: httpd_pid

duckhunt
sumber