Дочерний stdout.log супервизора: чтение в реальном времени

Супервизор активирует некоторые дочерние процессы.

Я сконфигурировал каждый из них следующим образом:

[program:XXXXX]
command=/XXXXX/XXXXX
directory=/XXXXXX
autostart=true
autorestart=true
startsecs=3
startretries=10000
stdout_logfile=/XXXXXX/stdout.log
stdout_logfile_maxbytes=1MB
stderr_logfile=/XXXXXX/stderr.log
stderr_logfile_maxbytes=1MB

Один из процессов производит большое количество экранных данных, которые я хотел бы читать в реальном времени во время тестов: 5 строк печатаются каждую секунду.

Теперь они зарегистрированы в stdout.log .

Я думал прочитать stdout.log с помощью

watch -0.1 tail /XXXXX/stdout.log

, но я вижу, что он НЕ обновляется при получении каждой строки: содержимое журнала, вероятно, кэшируется до тех пор, пока не достигнет некоторого предопределенного размера перед сохранением в файл .

Мне не нужно сохранять стандартный вывод для использования в будущем.

Есть ли возможность настроить Supervisor на непрерывное обновление stdout.log ?

Или, что еще лучше, чтобы не повредить диск в долгосрочной перспективе, есть ли возможность распечатать последние X строк stdout БЕЗ сохранения их в stdout.log ?

0
23.11.2017, 11:13
1 ответ

Если вы хотите избежать повреждения диска (, о котором я не видел, чтобы кто-то беспокоился целую вечность ), вы можете создать виртуальный диск, чтобы направить эти файлы журналов таким образом:

mkdir /var/log/tmplogs
mount -t tmpfs -o size=5m tmpfs /var/log/tmplogs

Или в формате fstab:

tmpfs       /var/log/tmplogs   nodev,nosuid,noexec,nodiratime,size=5M 0 0

Затем используйте этот каталог /var/log/tmplogsв качестве места назначения для этих файлов.

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

Is there a possibility to set Supervisor to continuously update stdout.log?

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

1
28.01.2020, 02:44

Теги

Похожие вопросы