Об этом сообщается в комментариях к выпуску №120:
Я не знаю, было ли это решено как-то в основной ветке, но в версии 3.1.1 кто-то случайно удалил каталог журнала на нашем сервере, и супервизор просто перестал работать, забрав с собой все другие программы, а не только ту, которая была каталог журнала отсутствует.
Я тоже видел такое поведение и меня это раздражало. Я думаю, что правильным поведением является создание 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
Самый полезный комментарий
Исправлено в fd22ca89ff353fbe92845e9d2517645e6cf149ac. Это исправление будет включено в Supervisor 3.2.
Вот как это скопировать и убедиться, что он исправлен. Минимальный
supervisord.conf
:Каталог журналов должен существовать, иначе
supervisord
откажется запускаться. Создайте каталог журнала и запуститеsupervisord
на переднем плане с этой конфигурацией:Удалите каталог журнала, пока
supervisord
все еще работает:Попробуйте запустить процесс: