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

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

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

Мне не нужно сохранять stdout для дальнейшего использования.

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

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

решение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 и без него), а не супервизором, вы можете подтвердить это, следуя примеру в супервизоревыпуск 803.

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

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

Связанный контент