Есть python скрипт, который запущен в docker контейнере и пишет в stdout. Запущено всё entrypoint'ом командой:
supervisord -n
Конфиг запуска одного из скриптов (для supervisor).
[program:main]
command = /usr/local/bin/python3 /program/main.py start
autostart = true
autorestart = true
stdout_logfile = /var/log/09.log
stderr_logfile = /var/log/09.err
Проблема: логи не пишутся сразу в файл, нужно подождать некоторое время (или пока наберётся какой-то буфер):
root@feb72dd31258:/var/log# ls -la
total 32
drwxr-xr-x 1 root root 4096 Jul 9 14:37 .
drwxr-xr-x 1 root root 4096 Jul 9 14:35 ..
-rw-r--r-- 1 root root 0 Jul 9 14:37 09.err
-rw-r--r-- 1 root root 24427 Jul 9 16:24 09.log
. . .
root@feb72dd31258:/var/log# ls -la
total 40
drwxr-xr-x 1 root root 4096 Jul 9 14:37 .
drwxr-xr-x 1 root root 4096 Jul 9 14:35 ..
-rw-r--r-- 1 root root 0 Jul 9 14:37 09.err
-rw-r--r-- 1 root root 32591 Jul 9 16:46 09.log
Запись в логи идет непрерывно, поэтому ожидаю, что изменения также будут записываться в лог непрерывно.
Моё предположение, что supervisord пишет в лог stdout с некоторым буфером. Из
документации единственное, что бросилось в глаза это
stdout_capture_maxbytes и
stderr_capture_maxbytes (выставлял их в 0 не помогло).
Конфигурационный файл supervisor стандартный (который в /etc/supervisor/supervisord.conf ).
Вопрос: Почему не пишется лог файл сразу? Как сделать так, чтобы запись шла непрерывно средствами supervisord.
Примечание:
1. Не хотелось бы перенаправлять поток ввода / вывода стандартными средствами.
2. Да, есть много способов решить задачу, однако хотел бы узнать, как сделать это через конфиг supervisor и из-за чего это происходит.
UPDATE: Бывает, что установка переменной окружения помогает в некоторых случаях, про все способы сбросить кеш можно почитать тут:
https://stackoverflow.com/questions/13934801/super...