Supervisor: Сбой, если каталог журнала не существует

Созданный на 3 июл. 2015  ·  4Комментарии  ·  Источник: Supervisor/supervisor

Об этом сообщается в комментариях к выпуску №120:

Я не знаю, было ли это решено как-то в основной ветке, но в версии 3.1.1 кто-то случайно удалил каталог журнала на нашем сервере, и супервизор просто перестал работать, забрав с собой все другие программы, а не только ту, которая была каталог журнала отсутствует.

Самый полезный комментарий

Исправлено в fd22ca89ff353fbe92845e9d2517645e6cf149ac. Это исправление будет включено в Supervisor 3.2.

Вот как это скопировать и убедиться, что он исправлен. Минимальный 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

Каталог журналов должен существовать, иначе supervisord откажется запускаться. Создайте каталог журнала и запустите supervisord на переднем плане с этой конфигурацией:

$ 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

Удалите каталог журнала, пока supervisord все еще работает:

$ rmdir /thelogdir

Попробуйте запустить процесс:

$ 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

Все 4 Комментарий

Я тоже видел такое поведение и меня это раздражало. Я думаю, что правильным поведением является создание logdir, если это возможно, и, как минимум, нельзя допускать сбоя других задач.

Я тоже видел такое поведение и меня это раздражало.

Когда это происходит? Исходный комментарий не конкретен. Возникает ли сбой, когда stdout_logfile в разделе [program:x] указывает несуществующий каталог журнала? Какую версию Supervisor вы используете?

Я думаю, что правильным поведением будет создание logdir, если это возможно

Я не использую другие программы с таким поведением. supervisord не имеет достаточно информации для автоматического создания каталога журналов, так как он не знает, какой пользователь должен владеть каталогом и какими должны быть разрешения. Я думаю, что единственное, что он может сделать, не увеличивая количество опций для всего этого, - это показать четкое сообщение об ошибке, когда каталог журнала не существует.

как минимум не должно быть разрешено сбой других задач

Я согласен с тем, что добавление раздела [program:x] котором stdout_logfile или stderr_logfile указывает несуществующий каталог, не должно приводить к сбою supervisord .

Возникает ли сбой, когда stdout_logfile в разделе [program: x] указывает каталог журнала, который не> существует? Какую версию Supervisor вы используете?

да. У меня какая-то проблема на 3.1.3.

Исправлено в fd22ca89ff353fbe92845e9d2517645e6cf149ac. Это исправление будет включено в Supervisor 3.2.

Вот как это скопировать и убедиться, что он исправлен. Минимальный 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

Каталог журналов должен существовать, иначе supervisord откажется запускаться. Создайте каталог журнала и запустите supervisord на переднем плане с этой конфигурацией:

$ 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

Удалите каталог журнала, пока supervisord все еще работает:

$ rmdir /thelogdir

Попробуйте запустить процесс:

$ 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
Была ли эта страница полезной?
0 / 5 - 0 рейтинги