Я использую supervisord как точку входа для контейнеров Docker, как описано в https://docs.docker.com/articles/using_supervisord/,
Я хочу, чтобы все журналы были записаны в stdout, поэтому я могу использовать встроенные инструменты, такие как docker logs
или журнал systemd, особенно если вы запускаете контейнеры в CoreOS.
для опции stderr there redirect_stderr=true
для подпроцессов,
возможно ли перенаправить подпроцесс stdout обратно в супервизор как-то и не обрабатывать фактические файлы журналов?
Ответ 1
Вы можете перенаправить программу stdout на супервизор stdout, используя следующие параметры конфигурации:
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
Пояснение:
- Когда процесс открывается
/dev/fd/1
(что совпадает с /proc/self/fd/1
), система фактически клонирует дескриптор файла 1 (stdout) этого процесса. Поэтому использование stdout_logfile
приводит к тому, что supervisord
перенаправляет программу stdout на собственный stdout.
-
stdout_logfile_maxbytes=0
отключает вращение файла журнала, что явно не имеет смысла для stdout. Не указывая эту опцию, это приведет к ошибке, поскольку значение по умолчанию составляет 50 МБ, а супервизор недостаточно умен, чтобы обнаружить, что указанный файл журнала не является обычным файлом.
Для получения дополнительной информации:
http://veithen.github.io/2015/01/08/supervisord-redirecting-stdout.html