Сообщение об ошибке «Crit uncaptured python exception» при запуске supervisord на докере

Я пытаюсь использовать supervisord в контейнере докеров, чтобы попытаться контролировать два процесса внутри контейнера. На данный момент процесс 1 вводит каждые 10 секунд «Я — процесс 1», а процесс 2 — «Я — процесс 2». Они оба действительно простые скрипты bash.

В журналах докеров я встречаю эту ошибку:

2022-04-04T15:40:56.770705073Z I am process 1
2022-04-04T15:40:56.770775532Z 2022-04-04 15:40:56,770 CRIT uncaptured python exception, closing channel <POutputDispatcher at 140473979288352 for <Subprocess at 140473979288304 with name PROGRAM1 in state RUNNING> (stdout)> (<class 'OSError'>:[Errno 29] Illegal seek [/usr/lib/python3/dist-packages/supervisor/supervisord.py|runforever|218] [/usr/lib/python3/dist-packages/supervisor/dispatchers.py|handle_read_event|281] [/usr/lib/python3/dist-packages/supervisor/dispatchers.py|record_output|215] [/usr/lib/python3/dist-packages/supervisor/dispatchers.py|_log|184] [/usr/lib/python3/dist-packages/supervisor/loggers.py|info|327] [/usr/lib/python3/dist-packages/supervisor/loggers.py|log|345] [/usr/lib/python3/dist-packages/supervisor/loggers.py|emit|227] [/usr/lib/python3/dist-packages/supervisor/loggers.py|doRollover|264])
2022-04-04T15:41:06.761850899Z I am process 2
2022-04-04T15:41:06.761913329Z 2022-04-04 15:41:06,761 CRIT uncaptured python exception, closing channel <POutputDispatcher at 140473979378128 for <Subprocess at 140473979378224 with name PROGRAM2 in state RUNNING> (stdout)> (<class 'OSError'>:[Errno 29] Illegal seek [/usr/lib/python3/dist-packages/supervisor/supervisord.py|runforever|218] [/usr/lib/python3/dist-packages/supervisor/dispatchers.py|handle_read_event|281] [/usr/lib/python3/dist-packages/supervisor/dispatchers.py|record_output|215] [/usr/lib/python3/dist-packages/supervisor/dispatchers.py|_log|184] [/usr/lib/python3/dist-packages/supervisor/loggers.py|info|327] [/usr/lib/python3/dist-packages/supervisor/loggers.py|log|345] [/usr/lib/python3/dist-packages/supervisor/loggers.py|emit|227] [/usr/lib/python3/dist-packages/supervisor/loggers.py|doRollover|264])

Мой Dockerfile выглядит так:

FROM debian:bullseye
WORKDIR /app
COPY . /app
COPY ./supervisord.conf /etc/supervisor/conf.d/supervisord.conf
RUN apt-get update && apt-get install -y  supervisor && apt-get install -y procps
#RUN apt-get install -y python3-pip && pip install supervisor-stdout
CMD ["/usr/bin/supervisord"]

И мой supervisord.conf выглядит так:

[supervisord]
nodaemon=true

[program:program1]
command=/bin/bash /app/process1.sh &
process_name=PROGRAM1
autostart=true
autorestart=true
priority=0
redirect_stderr=true
stdout_logfile=/dev/stdout
stderr_logfile=/dev/stderr

[program:program2]
command=/bin/bash /app/process2.sh &
process_name=PROGRAM2
autostart=true
autorestart=true
priority=0
redirect_stderr=true
stdout_logfile=/dev/stdout
stderr_logfile=/dev/stderr

Что здесь происходит? Есть ли проблема с моей конфигурацией?

Спасибо!

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
0
13
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я узнал, что происходит. Вам нужно указать, что максимальный размер файла журнала равен 0, потому что супервизор не может записать файл в /dev/stdout.

По каждой программе:

stdout_logfile_maxbytes = 0
stderr_logfile_maxbytes = 0

Вдохновение: https://github.com/Supervisor/supervisor/issues/1412

Другие вопросы по теме