Supervisor: Hancurkan jika direktori log tidak ada

Dibuat pada 3 Jul 2015  ·  4Komentar  ·  Sumber: Supervisor/supervisor

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.

logging

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 :

[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

Semua 4 komentar

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
Apakah halaman ini membantu?
0 / 5 - 0 peringkat