Супервизор активирует некоторые дочерние процессы.
Я настроил каждый из них следующим образом:
[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?
Я бы сказал нет, поскольку предполагается, что журналы будут записываться сразу после получения, и в большинстве случаев это не проблема супервизора, но без запущенной команды невозможно определить, сталкиваетесь ли вы с ошибкой или это нормально для вашей команды.