Dilaporkan dalam komentar edisi #120:
Saya tidak tahu apakah itu telah diselesaikan entah bagaimana di cabang master, tetapi di versi 3.1.1, seseorang secara tidak sengaja menghapus direktori log di server kami, dan supervisor berhenti bekerja, mengambil semua program lain dengannya, bukan hanya satu dengan direktori log hilang.
Saya telah melihat dan merasa terganggu dengan perilaku ini juga. Saya pikir perilaku yang benar adalah membuat logdir jika memungkinkan, dan setidaknya tidak boleh merusak tugas lain
Saya telah melihat dan merasa terganggu dengan perilaku ini juga.
Kapan itu terjadi? Komentar asli tidak spesifik. Apakah crash terjadi ketika stdout_logfile
di bagian [program:x]
menentukan direktori log yang tidak ada? Versi Supervisor apa yang Anda gunakan?
Saya pikir perilaku yang benar adalah membuat logdir jika memungkinkan
Saya tidak menggunakan program lain yang memiliki perilaku seperti ini. supervisord
tidak memiliki informasi yang cukup untuk membuat direktori log secara otomatis, karena ia tidak tahu pengguna mana yang harus memiliki direktori atau izin apa yang seharusnya. Saya pikir satu-satunya hal yang dapat dilakukan tanpa menumbuhkan banyak opsi untuk semua ini adalah menampilkan pesan kesalahan yang jelas ketika direktori log tidak ada.
minimal itu tidak boleh mengganggu tugas lain
Saya setuju bahwa menambahkan bagian [program:x]
di mana stdout_logfile
atau stderr_logfile
menentukan direktori yang tidak ada seharusnya tidak crash supervisord
.
Apakah crash terjadi ketika stdout_logfile di bagian [program:x] menentukan direktori log yang > tidak ada? Versi Supervisor apa yang Anda gunakan?
Ya. Beberapa masalah pada 3.1.3 bagi saya.
Diperbaiki di fd22ca89ff353fbe92845e9d2517645e6cf149ac. Perbaikan ini akan disertakan dalam Supervisor 3.2.
Berikut adalah cara untuk menduplikasi dan memverifikasi itu sudah diperbaiki. Minimal supervisord.conf
:
[supervisord]
logfile = /tmp/supervisord.log
[inet_http_server]
port = 127.0.0.1:9001
[supervisorctl]
serverurl = http://127.0.0.1:9001
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[program:cat]
command = /bin/cat
stdout_logfile = /thelogdir/foo.txt
autostart = false
Direktori log harus ada atau supervisord
akan menolak untuk memulai. Buat direktori log dan mulai supervisord
di latar depan dengan konfigurasi itu:
$ mkdir /thelogdir
$ supervisord --version
3.2.0.dev0
$ supervisord -n -c /path/to/supervisord.conf
2015-08-18 14:38:52,503 INFO Increased RLIMIT_NOFILE limit to 1024
2015-08-18 14:38:52,516 INFO RPC interface 'supervisor' initialized
2015-08-18 14:38:52,516 CRIT Server 'inet_http_server' running without any HTTP authentication checking
2015-08-18 14:38:52,516 INFO supervisord started with pid 49508
Hapus direktori log saat supervisord
masih berjalan:
$ rmdir /thelogdir
Coba mulai prosesnya:
$ supervisorctl -c /path/to/supervisord.conf
cat STOPPED Not started
supervisor> start cat
cat: ERROR (spawn error)
supervisor> status
cat FATAL unknown error making dispatchers for 'cat': ENOENT
Komentar yang paling membantu
Diperbaiki di fd22ca89ff353fbe92845e9d2517645e6cf149ac. Perbaikan ini akan disertakan dalam Supervisor 3.2.
Berikut adalah cara untuk menduplikasi dan memverifikasi itu sudah diperbaiki. Minimal
supervisord.conf
:Direktori log harus ada atau
supervisord
akan menolak untuk memulai. Buat direktori log dan mulaisupervisord
di latar depan dengan konfigurasi itu:Hapus direktori log saat
supervisord
masih berjalan:Coba mulai prosesnya: